Würde jemand erklären wollen, wie dieser Code die folgende Ausgabe erzeugt?Überschreibende und optionale Parameter
using System;
namespace ConsoleApplication1
{
class Test
{
public override string ToString() { return "ToString override"; }
public string ToString(string optional = "")
{ return String.Format("ToString with optional parameter {0}", optional); }
}
class Test2
{
public new string ToString() { return "ToString new"; }
public string ToString(string optional = "")
{ return String.Format("ToString with optional parameter {0}", optional); }
}
class Program
{
static void Main(string[] args)
{
Test one = new Test();
Test2 two = new Test2();
Console.WriteLine(one);
Console.WriteLine(one.ToString());
Console.WriteLine(one.ToString("foo"));
Console.WriteLine("--");
Console.WriteLine(two);
Console.WriteLine(two.ToString());
Console.WriteLine(two.ToString("bar"));
Console.ReadKey();
}
}
}
ToString überschreibt
ToString mit optionalen Parametern
ToString mit optionalem Parameter foo
-
ConsoleApplication1.Test2
ToString neu
ToString mit optionalem Parameter bar
Welche Zeile verstehst du nicht? (Es wäre langwierig, über sie alle ins Detail zu gehen.) –
Grundsätzlich, wie der Compiler zwischen den verschiedenen Methoden wählt, da sie identische Signaturen haben. – pneuma08
Sie haben keine identischen Signaturen ... und wieder würde es helfen, wenn Sie sagen würden * welche * Zeilen Sie feststecken. Wie viel hast du versucht zu verstehen, wie die Überladungsauflösung funktioniert? Übrigens gibt es so etwas wie C# 4.5 nicht. –