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