.NETでカスタムタイプを定義する場合、必要に応じて、Equalsメソッドを書き換えるだけでなく、GethashCodeメソッドを書き換える必要があります。これは非常に重要です。これは、タイプが辞書とハッシュセットのコレクションのキーとして使用される場合に特に重要です。
なぜGethashCodeを書き直したのですか?GethashCodeは、オブジェクトのハッシュコードを生成する責任があります。カスタムコンパレーターなしでは、このハッシュコードを収集して、オブジェクトを見つける適切なスケジュールを決定します。 2つのオブジェクトのハッシュコードが同じである場合、それらは同じバケツに配置されていると想定され、その時点でのみ、より詳細な等しいチェックを実行するために呼び出されます。
好ましいgethashcodeメソッド
提供されたFOOクラスを考慮して、equalsの書き換えはFOID属性に基づいて比較されます。この方法は、同じFOIDを持つオブジェクトが同じハッシュコードを持っていることを確認するためのロジックと等しいロジックと一致しています。
誤った書き換えの結果gethashcode
GethashCodeの書き換えを無視してデフォルトの実装を使用します。これにより、次の悪影響が生じます。ミス等しいオブジェクト:
2つのオブジェクトが実際に等しいが異なるハッシュコードを持っている場合、それらは等しいと呼ばないため等しく見なされることはありません。 競合が多すぎる:
GethashCodeの実装が誤っていないため、過度の競合が発生し、それらの多くは同じハッシュコードで割り当てられ、パフォーマンス効率が低くなります。
便利な輸送: load ==を提供することを検討してください。
以上が.NETで等しい場合、GethashCodeをオーバーライドする必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。