栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

C#.Equals()、. ReferenceEquals()和==运算符

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C#.Equals()、. ReferenceEquals()和==运算符

造成混淆的原因似乎是C#站的摘录中有一个错字,该错字应为:“ …,但 Equals
仅适用于对象实例。ReferenceEquals方法是静态的。”


您对每个语义含义的差异大体上是正确的(尽管“同一对象的不同实例”似乎有些混乱,但它可能应该读为“同一 类型的 不同实例” ),并且可以对其进行覆盖。

如果我们将其放在一边,让我们处理您的问题的最后一部分,即它们如何与普通

System.Object
实例和
System.Object
引用一起使用(我们都需要规避的非多态性质
==
)。在此,所有这三个操作将
等效地 工作,但有一个警告:
Equals
无法在上调用
null

Equals
是采用 一个 参数( 可以
null
)的实例方法。由于它是一个实例方法(必须在实际对象上调用),因此不能在
null
-reference 上调用。

ReferenceEquals
是一个采用 两个 参数的静态方法,其中 两个 参数都可以是
null
。由于它是静态的(不与对象 实例
相关联),因此
NullReferenceException
在任何情况下都不会抛出。

==
是运算符,在这种情况下(
object
)的行为与相同
ReferenceEquals
。它也不会抛出
NullReferenceException

为了显示:

object o1 = null;object o2 = new object();//Technically, these should read object.ReferenceEquals for clarity, but this is redundant.ReferenceEquals(o1, o1); //trueReferenceEquals(o1, o2); //falseReferenceEquals(o2, o1); //falseReferenceEquals(o2, o2); //trueo1.Equals(o1); //NullReferenceExceptiono1.Equals(o2); //NullReferenceExceptiono2.Equals(o1); //falseo2.Equals(o2); //true


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433083.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号