このRuntimeHelpers.GetHashCode(object)
メソッドを使用すると、オブジェクトの ID に基づいてハッシュ コードを生成できます。MSDN州:
RuntimeHelpers.GetHashCode メソッドは、オブジェクトの型が Object.GetHashCode メソッドをオーバーライドしている場合でも、常に Object.GetHashCode メソッドを非仮想的に呼び出します。
[MethodImpl(MethodImplOptions.InternalCall)]
[SecuritySafeCritical]
public static extern int GetHashCode(object o);
ただし、Object.GetHashCode()
Reflector (.NET 4.0) を使用してメソッドを検査すると、次のコードが表示されます。
public virtual int GetHashCode()
{
return RuntimeHelpers.GetHashCode(this);
}
Object.GetHashCode
内部から呼び出すとRuntimeHelpers.GetHashCode(object)
スタック オーバーフローが発生するため、MSDN ドキュメントは間違っていると思われます。
では、実際の動作RuntimeHelpers.GetHashCode(object)
と仕組みはどうなっているのでしょうか? ハッシュはどのように計算されるのでしょうか?
ベストアンサー1
MSDNのドキュメントでは、行動実装ではなくRuntimeHelpers
、デフォルトあなたが得る実装はobject.GetHashCode()
ない上書きされました。
これは、例えば、参照の等価性および をオーバーライドした型であってもEquals
、検索は行われます。私は、およびGetHashCode
を使用して、自分が管理しているシリアライザーでこれを行います。RuntimeHelpers.GetHashCode()
Object.ReferenceEquals