【发布时间】:2018-07-02 06:00:15
【问题描述】:
class FirstClass { }
class SecondClass { }
class Program
{
private static void Main(string[] args)
{
var firstClass1 = new FirstClass();
var firstClass2 = firstClass1;
var secondClass1 = new SecondClass();;
var secondClass2 = secondClass1;
object null1 = null;
object null2 = null;
int a = 10, b = 10, c = 20;
Console.WriteLine("firstClass1 == firstClass2:\t" + SameReference(firstClass1, firstClass2));
Console.WriteLine("secondClass1 == secondClass2:\t" + SameReference(secondClass1, secondClass2));
Console.WriteLine("firstClass1 == secondClass1:\t" + SameReference(firstClass1, secondClass1));
//Console.WriteLine("null1 == null2:\t" + SameReference(null1, null2));
Console.WriteLine("null1==firstClass1:\t" + SameReference(null1, firstClass1));
Console.WriteLine("a == b:\t" + SameReference(a, b));
Console.ReadKey();
}
public static bool SameReference(object object1,object object2)
{
if ((object1 == null && object2 != null) || (object1 != null && object2 == null))
return false;
if ((object1 == null && object2 == null) || (object1.GetHashCode() == object2.GetHashCode()))
{
Console.WriteLine(object1.GetHashCode() + "\t" + object2.GetHashCode());
return true;
}
return false;
}
}
在上面的代码中,GetHashCode() 方法为 a 和 b 返回 10 和 10,但我想比较地址。这就是 GetHashCode() 方法的工作原理。请解释一下。
【问题讨论】:
-
我正在尝试实现 ReferenceEquals(object A,object B) 方法,它应该为值类型返回 false,因为值类型被装箱并且它们存储在不同的地址。
-
您能告诉我们为什么您希望两个相同的值类型具有不同的哈希码吗?
-
另外,请解释为什么要在
ReferenceEquals已经存在时重新实现它。虽然实现很简单:object1 == object2. -
这对你有帮助吗??
标签: c#