注释
此内容由 Pearson Education, Inc. 的许可从 框架设计指南:可重用 .NET 库的约定、习惯和模式(第 2 版)重新打印。 该版于2008年出版,此后该书已于 第三版全面修订。 此页上的一些信息可能已过期。
本节讨论重载相等运算符,并将operator==
和operator!=
称为相等运算符。
❌ 请勿仅重载其中一个相等运算符,而忽略另一个。
✔️ 请确保 Object.Equals 和相等运算符具有相同的语义和类似的性能特征。
这通常意味着在重载相等运算符时,需要重写 Object.Equals
。
❌ 请避免从相等运算符引发异常。
例如,当其中一个参数为 null 时,返回 false,而不是引发 NullReferenceException
。
针对值类型的相等运算符
✔️ 如果相等有意义,应该对值类型重载相等运算符。
在大多数编程语言中,对于值类型,没有默认的 operator==
实现。
针对引用类型的相等运算符
❌ 避免在可变引用类型上重载相等运算符。
多种语言具有用于引用类型的内置相等运算符。 内置运算符通常实现引用相等性,当默认行为更改为值相等性时,许多开发人员都会感到惊讶。
对于不可变引用类型,此问题会缓解,因为不可变性使得发现引用相等性与值相等性之间的差异要困难得多。
❌ 请避免对引用类型重载相等运算符(如果实现的速度远远低于引用相等性的实现速度)。
部分内容 © 2005, 2009 Microsoft 公司。 保留所有权利。
获得皮尔逊教育公司许可后重印自 框架设计准则:可重用 .NET 库的约定、习惯和模式 ,由 Krzysztof Cwalina 和 Brad Abrams 编写,并作为微软 Windows 开发系列中的出版物之一,于 2008 年 10 月 22 日由 Addison-Wesley Professional 出版。