ASP.NET Lab

The Best Web, The Best Future

博客园 首页 新随笔 订阅 管理

下列规则概述了实现 Equals 方法与等式操作符(==)的指南:

  • 只要你实现了 Equals 方法,就要实现 GetHashCode 方法。这样做能够保持 Equals 与 GetHashCode 是同步的。
  • 只要你实现了等式操作符(==),就要重载 Equals 方法,并且让它们做相同的事情。这样做允许架构代码(如 Hashtable 与 ArrayList)使用 Equals 方法并且以使用等式操作符所编写的用户代码一样的方式来运作。
  • 在你实现 ICompare 接口的任何时候重载 Equals 方法。
  • 考虑在你实现 IComparable 的时候为等式(==)、不等(!=)、小于(<),以及大于(>)操作符实现操作符重载。
  • 不要从 Equals 方法或者 GetHashCode 方法或者等式操作符(==)那里抛出异常。

关于 Equals 方法的相关信息,请参考:[实现 Equals 方法]。

为值类型实现等式操作符(==)

大部分的编程语言都没有为值类型的等式操作符(==)而提供默认的实现。因此,在任何必要的时候你都应该重载等式操作符(==)。

你应该考虑为值类型实现 Equals 方法,因为 System.ValueType 的默认实现并不会完成你的自定义实现。

在你重载 Equals 方法的任何时候实现等式操作符(==)的重载。

为引用类型而实现等式操作符(==)

大部分的编程语言都为引用类型而提供了一个默认的等式操作符(==)实现。因此,你在为引用类型而实现等式操作符(==)的时候就应该谨慎地使用。对于大部分的引用类型,即使是那些实现了 Equals 方法的引用类型,也都不应该重载等式操作符(==)。

如果你的类型与基本类型(如 Point、String、BigNumber,以及等等)一样,那么重载等式操作符(==)。在你考虑重载加法(+)和减法(-)操作符的任何时候,你同样应该考虑重载等式操作符(==)。

posted on 2007-02-04 15:58  Laeb  阅读(368)  评论(0编辑  收藏  举报