C#框架阅读笔记--equals方法

Equals方法

正确实现一个equals方法

1、  如果obj参数为null, 就返回false, 因为在调用非静态的equals方法时,this所标示的当前对象显然不为null。

2、  如果this和obj参数应用的是不同类型的对象,就返回false。显然,判断一个string对象是否等于一个filestream对象时,结果应该是false。

3、  针对类型定义的每个实例字段,将this对象中的值与obj对象中的进行比较。任何字段不相等,就返回false。

4、  调用基类的equals 方法,一边比较它定义的任何字段。如果基类的equals方法返回,就返回false;否则返回true。

publicBoolean Equals (Object obj)

{

// 要比较的对象不能为null

if (obj == null)  return false;

// 如果对象属于不同的对象,则肯定不相等

if (this.GetType() != obj.GetType()) returnfalse;

 

// 如果对象属于相同的类型,那么在它们的所有字段都匹配的前提下返回true

// 由于System.Object没有定义任何字段,所以字段是匹配的

return true;

}

检查同一性应使用Object提供的ReferenceEquals这个静态的方法,原型如下:

public static BooleanReferenceEquals(Object objA, Object objB)

{

         return(objA== objB);

}

自定义类型相等性的4个特征:

1、  equals 必须是自反的;换言之,x.Equals(x)肯定返回true。

2、  Equals必须是对称的;换言之,x.Equals(y)肯定返回与y.Equals(x)相同的值。

3、  Equals必须是可传递的;换言之,如果x.Equals(y)返回true,y.Equals(z)返回true,那么x.Equals(z)也肯定返回true。

4、  Equals必须是一致的。尚若比较的两个值没有发生改变,那么Equals应该始终返回true或false。

实现Equals方法其他的事情:

1、  让类型实现System.IEquatable<T>接口的Equals方法,这个泛型接口允许我们定义一个类型安全的Equals方法。通常,实现的Equals方法应该获取一个Object参数,以便在内部调用类型安全的Equals方法。

2、  覆盖==和!=操作符方法,通常,应实现这些操作符方法,并在内部调用类型安全的Equals方法。

3、  实现GetHashCode方法,原因,同一对象的哈希码应该是相同的。

 


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值