C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のObject.GetHashCode()メソッドとは?構文とサンプルコードで解説

C#におけるObject.GetHashCode()メソッドは、すべてのオブジェクトに共通する既定のハッシュ関数として機能します。このメソッドは、オブジェクトの内容をもとに計算された整数値(ハッシュコード)を返し、Dictionary<TKey, TValue>HashSet<T>などのハッシュテーブル系のコレクションで、オブジェクトを高速に検索・管理するために利用されます。

構文

public virtual int GetHashCode();

このメソッドは仮想メソッドとして定義されているため、必要に応じて派生クラスや構造体でオーバーライドできます。

使用例1:Object型とString型のハッシュコード取得

まず、基本的な使用例を見てみましょう。Object型とString型それぞれのインスタンスからGetType()メソッドでTypeオブジェクトを取得し、そのハッシュコードを出力します。

using System;

public class Demo {
    public static void Main() {
        Object ob = new Object();
        String str = "Jim";
        Type type1 = ob.GetType();
        Type type2 = str.GetType();
        Console.WriteLine("Hash Code = " + type1.GetHashCode());
        Console.WriteLine("Hash Code = " + type2.GetHashCode());
    }
}

出力結果

Hash Code = 30015890
Hash Code = 21083178

※ ハッシュコードの値は実行環境やプロセスごとに異なる場合があります。

使用例2:構造体でのGetHashCode()のオーバーライド

次に、独自に定義した構造体でGetHashCode()メソッドをオーバーライドする例を紹介します。ここでは、複数のフィールド値をTupleにまとめ、そのハッシュコードを返すことで、フィールドの組み合わせに基づいた一貫性のあるハッシュコードを生成しています。

using System;

public struct Value {
    private int v1;
    private int v2;
    private int v3;

    public Value(int v1, int v2, int v3) {
        this.v1 = v1;
        this.v2 = v2;
        this.v3 = v3;
    }

    public override int GetHashCode() {
        return Tuple.Create(v1, v2, v3).GetHashCode();
    }
}

public class Demo {
    public static void Main() {
        Value v = new Value(1, 7, 12);
        Console.WriteLine(v.GetHashCode());
        v = new Value(12, 8, 7);
        Console.WriteLine(v.GetHashCode());
        v = new Value(8, 7, 12);
        Console.WriteLine(v.GetHashCode());
    }
}

出力結果

1258
12803
8931

ポイントまとめ

  • GetHashCode()はObjectクラスの仮想メソッドであり、既定のハッシュ関数として動作する。
  • 同じ内容を持つ等価なオブジェクトは、同じハッシュコードを返すように実装すべきである。
  • 独自クラスや構造体では、Equals()メソッドと合わせてGetHashCode()をオーバーライドすることで、DictionaryやHashSetなどのコレクションで正しく動作させられる。
  • ハッシュコードの具体的な値は実行ごとに変わる可能性があるため、永続化や比較の目的には使わないこと。
  1. C#のUInt64.GetHashCode()メソッドとは?構文と使い方をサンプルコード付きで解説

    C#のUInt64.GetHashCode()メソッドは、現在のUInt64(符号なし64ビット整数)インスタンスに対応するハッシュコードを取得するために使用されます。ハッシュコードは、ハッシュテーブルやディクショナリなどのデータ構造において、オブジェクトを効率的に検索・管理するために利用されるint型の数値です。構文UInt64.GetHashCode()メソッドの構文は以下のとおりです。public override int GetHashCode ();このメソッドは引数を受け取らず、呼び出し元のUInt64インスタンスのハッシュコードをint型の値として返します。使用例1:基本的な使い

  2. 【C#入門】UInt16.GetHashCode()メソッドの使い方を実例付きで解説

    C#のUInt16.GetHashCode()メソッドは、現在のUInt16インスタンスに対応するハッシュコード(HashCode)を取得するために使用されます。ハッシュコードは、ハッシュテーブルなどのデータ構造でオブジェクトを効率的に管理・検索する際に活用される整数値です。構文UInt16.GetHashCode()メソッドの構文は以下の通りです。public override int GetHashCode ();このメソッドは引数を受け取らず、現在のインスタンスの値を表すint型のハッシュコードを返します。使用例1まず、基本的な実装例を見てみましょう。通常の値とUInt16.MinVal