RuntimeHelpers.GetHashCode は何をしますか? 質問する

RuntimeHelpers.GetHashCode は何をしますか? 質問する

この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

おすすめ記事