加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

操作数的顺序是否对C#中的重载==运算符很重要?

发布时间:2020-12-15 23:23:11 所属栏目:百科 来源:网络整理
导读:我使用的是第三方工具(Unity3d),其中一个基本类重载了==运算符(UnityEngine.Object). 重载运算符的签名是: public static bool operator == (UnityEngine.Object x,UnityEngine.Object y) 进行比较的顺序是否会影响是否使用了这个重载运算符? 为了说明,它
我使用的是第三方工具(Unity3d),其中一个基本类重载了==运算符(UnityEngine.Object).

重载运算符的签名是:

public static bool operator == (UnityEngine.Object x,UnityEngine.Object y)

进行比较的顺序是否会影响是否使用了这个重载运算符?

为了说明,它们是否应该使用重载运算符并返回相同的结果?

// initialize with some value
UnityEngine.Object a = .... 

Debug.Log(a == null);
Debug.Log(null == a);

我问的原因是因为我想(有时)避免这种重载行为(使用默认的==运算符),并且想知道翻转订单是否有助于此?

(可能还有另一种选择 – 将操作数转换为System.object,但我不是100%确定它有效).

解决方法

更新问题后更新:

如果要在比较null时避免调用重载函数,请使用ReferenceEquals:

if(a.ReferenceEquals(null)) ...

年龄较小的答案,已经过时的错误以及@Jon Skeet的错误……

根据this,以X和Y为参数的二元运算符的重载决策是通过首先取X和Y定义的所有运算符的并集来完成的.

所以a == b导致与b == a完全相同的重载分辨率.

该链接来自2003年,但我怀疑微软已经改变了一些东西,因为它会破坏很多旧的代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读