我知道重寫GetHashCode
時我們重寫Equals
方法的重要性。我假設Equals
內部電話GetHashCode
。哪些方法在內部調用GetHashCode?
可能在內部使用GetHashCode
的其他方法是什麼?
我知道重寫GetHashCode
時我們重寫Equals
方法的重要性。我假設Equals
內部電話GetHashCode
。哪些方法在內部調用GetHashCode?
可能在內部使用GetHashCode
的其他方法是什麼?
Equals
不在內部呼叫GetHashCode
。
GetHashCode
GetHashCode
被許多類用作提高性能的手段:如果兩個實例的哈希碼不同,那麼實例並不等於,因此定義爲,因此可以跳過對Equals
的調用。
只有當散列碼相同時,它需要調用Equals
,因爲多個實例可以具有相同的散列碼,即使它們不同。
的是像這樣工作類具體的例子:
我認爲國內的Equals調用GetHashCode的。
實際上這會很不尋常。 GetHashCode
主要用於字典和其他基於哈希集的實現;所以:Hashtable
,Dictionary<,>
,HashSet<>
,和一系列其他的東西。基本上,GetHashCode
有兩個目的:
參見:Why is it important to override GetHashCode when Equals method is overridden?
作爲Marc例子的補充,值得注意的是Linq頻繁使用GetHashCode。 – Brian
的'的Equals實現()'通常不叫'GetHashCode的() ',但任何散列容器都會將其稱爲它的集合元素。 –
Eric Lippert寫了一個很好的博客:http://blogs.msdn.com/b/ericlippert/archive/2011/02/28/guidelines-and-rules-for-gethashcode.aspx –
我的道歉,當我打電話Overriden'Equals'方法。 'GetHashCode'在內部調用時沒有在Overriden'Equals'方法中明確提及。 因此想知道什麼情況下觸發'GetHashCode'的呼叫 – CarbineCoder