繁体   English   中英

Gethashcode()函数

[英]Gethashcode() function

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

    }
}

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

如果你想要它们是相同的,你需要覆盖GetHashCode() ,因此它基于你的字段(然后你应该记得也重写Equals() )。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM