2015-09-10 78 views
5

我發現通過代碼示例提出此問題更容易。如何判斷父類的實例是否是從特定子實例創建的

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

如果我並不瞭解上述任務,我將如何確定是否firstParent從實例firstChild創建,而無需訪問/比較它們的字段或屬性?

回答

9

嘛,firstParent創建(有沒有使用 「new」 關鍵字),但firstChild

Parent firstParent = (Parent)firstChild; 

爲了測試使用Object.ReferenceEquals(即firstParentfirstChild都只是同樣的例子)

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

簡單的相等運算符應該工作。如果Equals方法未被覆蓋。

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 

由於對象的默認平等的方法是通過參考

的Equals的默認實現支持引用類型參考平等,和按位的相等值類型進行檢查。引用相等意味着被比較的對象引用指的是同一個對象。按位相等意味着被比較的對象具有相同的二進制表示。

相關問題