重複の可能性:
オーバーライドされた System.Object.GetHashCode に最適なアルゴリズムは何ですか?
これは、カスタム型でのEquals
メソッドをオーバーライドする場合、メソッドの実装もオーバーライドして提供し、コレクション クラスのサポートで使用する一意のハッシュ コードの生成をサポートする必要があることがわかっています。他のクラスの場合もあります。Object
GetHashCode
Hashtable
Dictionary
これにより、メソッド内で使用されるハッシュ アルゴリズムの実装overriden
GetHashCode
が最適かつ正確であることが義務付けられます。つまり、型の一意のハッシュが生成され、型を使用するアプリケーションのパフォーマンスを向上させるために可能な限り迅速に行われます。
私の質問は、どのハッシュ アルゴリズムGetHashCode
が正確で、実装で使用したときに最適なパフォーマンスを提供するかということです。それとも、基本型のGetHashCode
実装のみを使用する必要がありますか? value types
私は両方のためにこの答えを知りたいreference types
..
編集: オーバーライドする必要がある理由について、以下のクラスの例を示しますEquals
。
public class Laptop : LaptopBase
{
public readonly string Make;
public readonly string ProcessorArch;
public readonly int MemorySupported;
public readonly int HardDiskGBSupported;
public readonly Color ColorName;
public Laptop(make, procArch, memorySupp, hdGB, color)
{
Make = make;
ProcessorArch = procArch;
MemorySupported = memorySupp;
HardDiskGBSupported = hdGB;
ColorName = color;
}
}
ここで、上記で定義されたすべてのフィールドが互いに一致する 2 つのラップトップ インスタンスに対して true を返したいので、Equals
andGetHashCode
メソッドをオーバーライドする必要があります。また、別の要件として、これが派生クラスであり、再さらに使用され、多くの方法をサポートします。したがって、値型 (構造体) にすることはできません。上記のタイプの 2 つのインスタンスをすべて一致するインスタンス フィールドで試してみましたが、基本実装を使用すると、必要な場所にEquals
戻ります..
そのようなシナリオをどのようにサポートしますか?false
true