1

C1 と c2 のハッシュコードが同じでないのはなぜですか? コードは「同じ」になりません....(両方のクラスで i=0 )

class myclass
{
    public static int i;

    static void Main()
    {
        myclass c1 = new myclass();
        myclass c2 = new myclass();

        if (c1.GetHashCode() == c2.GetHashCode())
            Console.Write("Same");

    }
}
4

2 に答える 2

3

のデフォルトの実装はGetHashCode()、オブジェクトのフィールドではなく、参照に基づいています。

それらを同じにしたい場合は、オーバーライドする必要があるGetHashCode()ため、フィールドに基づいています(そして、オーバーライドするEquals()ことも忘れないでください)。

于 2010-08-25T17:56:54.607 に答える
1

同じクラスの異なるインスタンスを作成しているためです。クラスの各インスタンスには独自のハッシュコードがあり、両方が同じフィールド値を共有している場合でも、ハッシュコードはプログラムのメモリ内のオブジェクトを識別するために使用されます。

ただし、これを行った場合、同じオブジェクトを指す 2 つの変数を作成しているだけなので (つまりc1、オブジェクトへの参照を に渡しているためc2) 、"Same" と表示されます。

    myclass c1 = new myclass();
    myclass c2 = c1;

    if (c1.GetHashCode() == c2.GetHashCode())
        Console.Write("Same");

もちろん、これがあなたが達成しようとしているものだとは思いません。

于 2010-08-25T17:55:01.930 に答える