关于 “Equals”和“==”

相等性分为:A引用相等(ReferenceEquals),B值相等(Equals)
B值相等还分为:A静态Equals(Object objA, Object objB),B实例Equals(Object obj)

引用相等意味着要比较的不是两个对象,而是两个对象引用,

值相等是大家普遍理解的意义上的相等:它意味着两个对象包含相同的值。

如果两个对象具有引用相等性,则它们也具有值相等性,
但是值相等性不能保证引用相等性

静态版的Equals依赖于实例版的Equals

如果重载 == 相当于把系统默认的引用相等转换成值相等
当类型重载 operator == 时, 它也必须重写 实例版的Equals 方法以提供同样的功能。
重载运算符 == 的任何类型还应重载运算符 !=。

默认情况下,通过判断两个引用是否指示同一对象来测试引用是否相等,
因此引用类型不需要实现运算符 == 就能获得此功能。

注意:

运算符 == 的重载中的常见错误是使用 (a == b)、(a == null) 或 (b == null) 来检查引用相等性。
这会导致调用重载的运算符 ==,从而导致无限循环。
应使用 ReferenceEquals 或将类型强制转换为  Object 来避免无限循环。

值类型继承ValueType,将重写实例版的Equals

建议:重写 Equals 的任何类同时也重写 System.Object.GetHashCode。

由于在.Net中不允许重写静态方法
所ReferenceEquals和静态Equals是不能重写的
对ReferenceEquals来讲,始终是自然引用,也就是来自于系统默认的对象引用比较
对静Equals来讲,同样是自然引用,但他调用的是来自对象本身的实例,相当于被重写了.

 

 

引自 http://topic.csdn.net/u/20090908/00/e64b8f60-0c91-44c0-a3dc-4387b8dfaa21.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值