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

因为您正在创建同一类的不同实例。类的每个实例都有自己的哈希码,哈希码用于标识程序内存中的对象,即使它们共享相同的字段值。

然而,如果你这样做了,它会写成“Same”,因为你只是创建了两个指向同一个对象的变量(即你将c1对象的引用传递给c2):

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

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

当然,我认为这不是您想要实现的目标。

于 2010-08-25T17:55:01.930 回答