In diesem folgenden Beispiel gibt die dritte Auswertung false, alle gut, aber das vierte Beispiel gibt true zurück.
Ich verstehe nicht ganz, wie das funktioniert jedoch standardmäßig Object.Equals
vergleicht zwei Referenzen für Objekt Gleichheit, und sehen als a
und b
zeigen beide auf eine eindeutige Instanz einer Zeichenfolge, sollte dies false zurückgeben, was es im dritten Beispiel tut, aber nicht in der vierten.
Jetzt verstehe ich, warum es in dem zweiten Beispiel True zurückgibt, da die .Equals()
-Methode in der String-Klasse überschrieben wird, aber im vierten Beispiel wird diese Zeichenfolge als ein Objekt umgewandelt.
Also würde es Object.Equals
in diesem Fall nicht anrufen?Überschreiben Gleich und Typ Casting
static void Main()
{
// Create two equal but distinct strings
string a = new string(new char[] {'h', 'e', 'l', 'l', 'o'});
string b = new string(new char[] {'h', 'e', 'l', 'l', 'o'});
Console.WriteLine (a == b); // Returns true
Console.WriteLine (a.Equals(b)); // Returns true
// Now let's see what happens with the same tests but
// with variables of type object
object c = a;
object d = b;
Console.WriteLine (c == d); // Returns false
Console.WriteLine (c.Equals(d)); // Returns true
}
Richtig, also, auch wenn wir die Zeichenfolge in ein Objekt umwandeln, wird es immer noch die überschriebene Implementierung von '.Equals' aufrufen? –
@OverlyÜberschüssig ja; das ist der Schlüsselpunkt des Polymorphismus; Hervorhebung: Operatoren wie '==' sind ** nicht ** polymorph –