Gethashcode()函数

时间:2010-08-25 17:51:11

标签: c# reference equals gethashcode

为什么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");

    }
}

2 个答案:

答案 0 :(得分:3)

GetHashCode()的默认实现基于引用,而不是对象的字段。

如果您希望它们相同,则需要覆盖GetHashCode(),因此它基于您的字段(然后您应该记得也覆盖Equals())。

答案 1 :(得分:1)

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

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

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

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

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