覆蓋GetHashCode
和Equals
用於一致的對像比較
>方法比較類的對象時,也必須覆蓋Equals
>方法。當您的對像用作基於哈希的集合(例如詞典或哈希集)中的鍵時,這一點尤其重要。 GetHashCode
:Foo
>
<code class="language-csharp">public override bool Equals(object obj) { // ... comparison logic based on FooId ... }</code>
屬性的對象進行自定義,則默認Equals
(從Foo
繼承)仍將基於對象的內存地址生成哈希碼。 當將FooId
對像用作哈希表中的鍵時,這種不一致會導致不可預測的行為。 GetHashCode
Object
>Foo
為什麼一致的哈希重要
覆蓋至關重要:
>
GetHashCode
Equals
GetHashCode
Equals
>實現
GetHashCode
實現應與方法的邏輯一致:
GetHashCode
均等對象必須具有相同的哈希代碼。 Equals
>
Equals
Foo
這將基於GetHashCode
>生成哈希碼,鏡像
<code class="language-csharp">public override int GetHashCode() { return this.FooId.GetHashCode(); }</code>
使用自定義比較來增強清晰度FooId
Equals
>
和時,請考慮添加自定義平等運算符(和
)以提高代碼可讀性和可維護性。以上是為什麼在覆蓋`equals'時必須覆蓋``gethashcode''?的詳細內容。更多資訊請關注PHP中文網其他相關文章!