2015-09-10 13 views
5

Ich finde es einfacher, diese Frage anhand eines Codebeispiels zu stellen.Ermitteln, ob eine Instanz einer Elternklasse von einer Instanz eines bestimmten Kindes erstellt wurde

class Parent {} 
class Child : Parent {} 
... 
... 
Child firstChild = new Child(); 
Child secondChild = new Child(); 
Parent firstParent = (Parent)firstChild; 
Parent secondParent = (Parent)secondChild; 

Wenn ich nicht eingeweiht zu den oben genannten Aufgaben war, wie würde ich feststellen, ob firstParent von der Instanz erstellt wurde firstChild ohne Zugriff auf/ihre Felder oder Eigenschaften zu vergleichen?

Antwort

9

Nun, firstParent ist nicht erstellt (es gibt kein "neues" Schlüsselwort verwendet wird), aber gegossen vom firstChild:

Parent firstParent = (Parent)firstChild; 

Zur Verwendung testen Object.ReferenceEquals (dh firstParent und firstChild sind nur die gleiche Instanz)

if (Object.ReferenceEquals(firstParent, firstChild)) { ... } 
0

einfache Gleichheitsoperator sollte funktionieren. wenn Equals Methode nicht überschrieben wird.

Child firstChild = new Child(); 
Child secondChild = new Child(); 
Parent firstParent = (Parent) firstChild; 
Parent secondParent = (Parent) secondChild; 

Console.WriteLine(firstParent == firstChild); // true 
Console.WriteLine(firstParent == secondChild); // false 

Da die Standardgleichheits Methode von Objekten ist durch Bezugnahme

Die Standardimplementierung von Equals unterstützt Referenz Gleichheit für Referenztypen und bitweise Gleichheit für Werttypen zu überprüfen. Referenzgleichheit bedeutet, dass die Objektreferenzen, die verglichen werden, sich auf dasselbe Objekt beziehen. Bitweise Gleichheit bedeutet, dass die Objekte, die verglichen werden, dieselbe binäre Darstellung haben.

Verwandte Themen