應該所有的c#類都覆蓋Equals和GetHashCode嗎?爲了正確應該所有的c#類實現Equals和GetHashCode?
回答
從System.Object
繼承此的所有類。
如果您需要爲類提供特定的Equals或GetHashCode,那麼您應該重寫類中的方法。否則,只是讓他們..
http://msdn.microsoft.com/en-us/library/system.object.gethashcode(v=VS.71).aspx
不,他們已經這樣做了。
是否必須重寫它們,取決於它將如何使用。在大多數情況下,這不是必需的。
所有類都已從基類System.Object繼承這些方法。
如果您需要能夠比較對象的兩個實例,而不是簡單引用相等,則可以選擇覆蓋派生類中的方法,否則不需要。
但請記住,如果您選擇重寫其中一個,則還需要重寫另一個,以確保散列表和字典鍵等功能與派生類一起正常工作。 GetHashCode方法需要反映與Equals方法相同的邏輯。在這裏看到更多的解釋和例子:
http://msdn.microsoft.com/en-us/library/bsc2ak47.aspx
和
http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx
另請參閱:http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c – 2010-11-04 12:34:18
也許不是全部,而是將被放入某種袋(的IList,ICollection的,IDictionary的所有類,Hashset等),並需要一些簡單的方法來區分它們(只需考慮Sort()
,Contains()
,BinarySearch()
等)。
如果您使用某種方式,您應該明確地實施它們正確。
當你覆蓋
Equals
,基本上。 當你想提供一個不同的 平等的想法比簡單的參考 平等。字符串是一個很好的例子 - 2個 字符串相等(下一個簡單 的Equals呼叫),如果他們表示字符的 相同的序列。代碼散列 反映了這種情況,因此如果兩個字符串相等,它們將具有相同的散列碼 。 (反過來不是 必然是真的 - 兩個不相等的字符串 可以具有相同的哈希碼,但它不太可能是 。)
(字符串是在其他方面非常棘手, 提醒你 - 有許多基於文化和 外殼平等的不同 想法,但
String.Equals
只是看起來 在UTF-16代碼點,這使得 了串,並在 最簡單可設想的方式比較它們)
- 1. 實現EqualityCompare vs覆蓋GetHashCode和Equals
- 2. Equals和GetHashCode如何在匿名類型上實現?
- 3. C#:GetHashCode,Equals和Dictionary導致IndexOutOfRangeException?
- 4. 應該嵌入jpa類實現equals和hashCode嗎?
- 5. 所有類都應該有.equals和.hashcode方法嗎?
- 6. 實體框架4覆蓋自己類屬性的Equals和GetHashCode
- 7. GetHashCode和Equals在System.Attribute中實現不正確?
- 8. c#與equals和gethashcode()具有相同的問題,如Java?
- 9. 覆蓋類型的Equals和GetHashCode,它有'dib''?
- 10. 即使我實現所有的hashCode(),equals()和toString(),我應該使用數據類嗎?
- 11. C#,重寫GetHashCode和Equals時應考慮哪些類字段/成員?
- 12. Equals和GetHashCode中的屬性或字段?
- 13. NHibernate:覆蓋Equals和GetHashCode的原因
- 14. 在C#中簡化覆蓋Equals(),GetHashCode()以實現更好的可維護性
- 15. 實現GetHashCode的一個值類
- 16. Equals,GetHashCode,EqualityComparers和模糊相等
- 17. linq&distinct,執行equals&gethashcode
- 18. 是否有一個示例爲什麼Equals/GetHashCode應該在NHibernate中被覆蓋?
- 19. 在C#中實現GetHashCode。空值處理
- 20. 我是否需要在新類中重寫GetHashCode和Equals?
- 21. 所有類應該實現IDisposable接口嗎?
- 22. 當空間大於32位時,如何實現兼容GetHashCode的Equals方法?
- 23. 我應該關注這個compareTo/equals/hashCode實現嗎?
- 24. GetHashCode()如何爲Int32實現?
- 25. 實體類的GetHashCode()的正確實現是什麼?
- 26. 如何爲泛型類型實現equals?
- 27. 調用所有實現該方法的類的方法
- 28. Equals和GetHashCode中的惰性加載的NHibernate屬性
- 29. 如何實現hashCode和equals方法
- 30. ObjectOutputStream實現equals有什麼用處?
可能重複:http://stackoverflow.com/questions/732930/when-to-override-gethashcode – BrokenGlass 2010-11-04 12:29:19