在.Net中,如何检查两个标识符是否指向对象的同一实例?

在.Net中,如何检查两个标识符是否指向对象的同一实例?,.net,object,compare,instance,.net,Object,Compare,Instance,我一直想知道两个变量是否指向同一个类的实例。听起来很明显,但能做到吗 比如说。假设您有一个名为“IsSameInstanceAs”的运算符的以下代码。是否有任何方法可以使用.Net、C#实现if语句中注释中所述的“IsSameInstanceAs”运算符的逻辑:- 我相信这是不可能做到的,但如果有人知道的更好,请帮助。记住,我不想比较对象实例,我想知道它们是否是相同的实例 class MyClass { static void Main() { object o = null

我一直想知道两个变量是否指向同一个类的实例。听起来很明显,但能做到吗

比如说。假设您有一个名为“IsSameInstanceAs”的运算符的以下代码。是否有任何方法可以使用.Net、C#实现if语句中注释中所述的“IsSameInstanceAs”运算符的逻辑:-

我相信这是不可能做到的,但如果有人知道的更好,请帮助。记住,我不想比较对象实例,我想知道它们是否是相同的实例

class MyClass {

   static void Main() {
      object o = null;
      object p = null;
      object q = new Object();

      Console.WriteLine(Object.ReferenceEquals(o, p));
      p = q;
      Console.WriteLine(Object.ReferenceEquals(p, q));
      Console.WriteLine(Object.ReferenceEquals(o, p));
   }
}
约翰·汤普森是相关的方法

确定指定的对象实例是否相同 例如

class MyClass {

   static void Main() {
      object o = null;
      object p = null;
      object q = new Object();

      Console.WriteLine(Object.ReferenceEquals(o, p));
      p = q;
      Console.WriteLine(Object.ReferenceEquals(p, q));
      Console.WriteLine(Object.ReferenceEquals(o, p));
   }
}
使用:

从文件中:

“确定指定的对象实例是否相同 实例。”


通常,在对象上使用comparison
=
操作符时,它就是这样做的 然而,若对象的类型实现了一个比较运算符的OVERLOAD,那个么在这种情况下,您可以始终使用
object.Reference.Equals(x,y)

因此,大多数类型几乎都来自BCL(字符串是一个显著的例外)

你能行

x == y; //reference comparison for most reference types
object.ReferenceEquals(x,y); //works in all cases
x.Equals(y); //reference comparison for most reference types
第一个和最后一个不同之处在于,第一个重要的是编译时类型,而第二个重要的是运行时类型。即使在编译时和运行时类型相同的情况下,也不能保证它们会产生相同的结果(只有良好的方式才能强制执行)

因为它是第一个示例中表达式的编译时类型,所以您可以将其重写为

(object)x == (object)y; //always a reference comparison for reference types
我个人会使用object.ReferenceEquals,而不是==和强制转换。对我来说,这种方法更清楚地表明了我们的意图

来自MSDN:
下面的示例使用ReferenceEquals确定两个对象是否为同一实例

class MyClass {

   static void Main() {
      object o = null;
      object p = null;
      object q = new Object();

      Console.WriteLine(Object.ReferenceEquals(o, p));
      p = q;
      Console.WriteLine(Object.ReferenceEquals(p, q));
      Console.WriteLine(Object.ReferenceEquals(o, p));
   }
}
这将产生以下输出:

True
True
False

ReferenceEquals(objectobja,objectobjb)
将返回
true
如果
objA
objB
是同一实例,或者如果两者都
null
;否则,
false

谢谢。这就是我一直在寻找的。