为什么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");
}
}
答案 0 :(得分:3)
GetHashCode()
的默认实现基于引用,而不是对象的字段。
如果您希望它们相同,则需要覆盖GetHashCode()
,因此它基于您的字段(然后您应该记得也覆盖Equals()
)。
答案 1 :(得分:1)
因为您正在创建同一个类的不同实例。每个类的实例都有自己的哈希码,哈希码用于识别程序内存中的对象,即使它们都共享相同的字段值。
但是,如果你这样做,它会写“相同”,因为你只是创建两个指向同一个对象的变量(即你将c1
的引用传递给对象c2
):
myclass c1 = new myclass();
myclass c2 = c1;
if (c1.GetHashCode() == c2.GetHashCode())
Console.Write("Same");
当然,我认为这不是你想要实现的目标。