2012-07-13 49 views
3

在微軟的MSDN庫文章的Object.Equals方法(對象),(http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx)的實例中,呈現演示如何重寫的Equals。它看起來像這樣:忽略equals子:typeof返回靜態類型

public override bool Equals(Object obj) { 
    //Check for null and compare run-time types. 
    if (obj == null || GetType() != obj.GetType()) return false; 
    // ... 
} 

在接下來的文檔中,我注意到以下聲明。

(請注意,typeof運算這裏不使用,因爲它返回的靜態類型。)

什麼上述聲明意味着 - 在平原條款 - 這裏有什麼警示?

+0

奇怪的是,他們刪除您從.NET 4.5的文件,這意味着你不能在你的鏈接找到它現在援引確切的句子。 – colinfang 2013-07-09 17:07:46

回答

5

在他們的示例中,在Point.Equals()的實現中,如果使用typeof(Point)而不是GetType(),則它們將無法在Point3D的實現中利用base.Equals()。 Equals(),因爲它總是返回false。通過使用GetType(),它確保類型的運行時評估,而不是硬編碼與typeof(Point)類型比較的類型;它允許一個子類依靠基類進行類型比較,同時允許子類專注於基類的補充數據。