2010-04-16 102 views

回答

3

不知道你所談論的,因爲你是一個有點含糊...

但它的問題,如果你的意思是你 應(如果你不」 t想要編譯器警告,或者在代碼中出現意外的行爲)覆蓋GetHashCode當您覆蓋Equals時,則是。

12

如果你的意思是在繼承方面很難定義平等,是的。

但是,.NET有IEqualityComparer<T>接口,它經常用於相等和散列 - 容器如Dictionary<TKey, TValue>。幾乎在需要相等/散列的框架中的所有內容都允許通過IEqualityComparer<T>來指定行爲,這意味着如果由類型本身給出的表單不適合您的需求,則可以表達您想要的任何平等概念。

+0

像這樣的問題:http://onjava.com/pub/a/onjava/2006/09/13/dont-let-hibernate-steal-your-identity.html – Blankman 2010-04-16 18:49:31

+0

@Blankman:對 - 基本上你想要兩個不同的概念平等;一個由ID和一個由各個領域。這正是「IEqualityComparer 」的用途。 – 2010-04-16 19:54:07

+0

so Collections使用IEqualityComparer ?如果是的話,它似乎比Java更健壯一些。 – Blankman 2010-04-16 21:14:58

相關問題