等于和相等运算符 (==) 的实现准则

下面的规则概括了 Equals 方法和等号运算符 (==) 的实现准则:

  • 每次实现 Equals 方法时都实现 GetHashCode 方法。 这可以使 EqualsGetHashCode 保持同步。

  • 每次实现相等运算符 (==) 时,都重写 Equals 方法,使它们执行同样的操作。 这样,使用 Equals 方法的基础结构代码(如 HashtableArrayList)的行为就与用相等运算符编写的用户代码相同。

  • 每次实现 IComparable 时都要重写 Equals 方法。

  • 实现 IComparable 时,应考虑实现相等 (==)、不相等 (!=)、小于 (<) 和大于 (>) 运算符的运算符重载。

  • 不要在 EqualsGetHashCode 方法或相等运算符 (==) 中引发异常。

有关 Equals 方法的相关信息,请参见实现 Equals 方法

在值类型中实现相等运算符 (==)

大多数编程语言中都没有用于值类型的默认相等运算符 (==) 实现。 因此,只要相等有意义就应该重载相等运算符 (==)。

应考虑在值类型中实现 Equals 方法,这是因为 System.ValueType 的默认实现和自定义实现都不会执行。

每次重写 Equals 方法时都实现相等运算符 (==)。

在引用类型中实现相等运算符 (==)

大多数语言确实为引用类型提供默认的相等运算符 (==) 实现。 因此,在引用类型中实现相等运算符 (==) 时应小心。 大多数引用类型(即使是实现 Equals 方法的引用类型)都不应重写相等运算符 (==)。

如果类型是 Point、String、BigNumber 等基类型,则应重写相等运算符 (==)。 每当考虑重载加法 (+) 和减法 (-) 运算符时,也应该考虑重载相等运算符 (==)。

部分版权所有 2005 Microsoft Corporation。 保留所有权利。

部分版权所有 Addison-Wesley Corporation。 保留所有权利。

设计指引的详细信息,请参阅"框架设计准则: 公约、 成语和可重复使用的模式。网络图书馆"书 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 韦斯利,发表。

请参见

参考

实现 Equals 方法

Object.Equals

概念

使用准则

其他资源

类库开发的设计准则