我只是.NET中一些类和方法的好奇背景所以我只是想知道ReferenceEquals方法如何理解2个引用是否属于同一个对象?
答案 0 :(得分:4)
因为“同一个对象”意味着“内存中的相同位置”,操作可以简单地检查引用的“地址”值。
答案 1 :(得分:2)
引用基本上是一个32位整数,指向存储对象的堆中的位置,因此ReferenceEquals可以简单地比较两个整数值并检查它们是否相同。
请注意值类型,ReferenceEqual总是会失败! ValueType覆盖虚拟Object.Equals方法,以比较派生类型中的所有成员变量而不是引用。
在不知道成员变量的运行时名称和类型的情况下,ValueType.Equals的默认实现依赖于反射和反射的使用,我们都知道,它很慢。作为一般的经验法则,建议您在创建自定义值类型时始终覆盖ValueType.Equals方法,并且您应该强烈考虑在您使用时重载==和!=运算符!
答案 2 :(得分:1)
因为它们具有相同的价值。就像非托管应用程序中的两个指针指向相同的对象一样,如果它们具有相同的值。
答案 3 :(得分:1)
ReferenceEqulas
检查内存位置是否相同
class MyClass {
static void Main() {
object o = null;
object p = null;
object q = new Object();
//Here o and p not referring to any location.so result true
Console.WriteLine(Object.ReferenceEquals(o, p));
p = q; // here p's memory location is mapping to q.So both referring to same memory location. so result is true.
Console.WriteLine(Object.ReferenceEquals(p, q));
//Here the p and o are in different memory location so the result is false
Console.WriteLine(Object.ReferenceEquals(o, p));
}
}
答案 4 :(得分:0)
我怀疑它正在检查引用是否指向内存中的同一个对象,即两个对象都引用了相同的地址。