【发布时间】:2010-12-18 11:58:37
【问题描述】:
我正在开发一个 C# 项目,到目前为止,我一直在使用不可变对象和工厂来确保 Foo 类型的对象始终可以与 == 进行比较是否相等。
Foo 对象一旦创建就无法更改,并且工厂始终为给定的一组参数返回相同的对象。这很好用,并且在整个代码库中,我们假设== 始终用于检查相等性。
现在我需要添加一些引入边缘情况的功能,但这种情况并不总是有效。最简单的做法是为该类型重载operator ==,这样项目中的其他代码都不需要更改。但这让我觉得代码味道很重:重载operator == 而不是Equals 看起来很奇怪,而且我习惯了== 检查引用相等性和Equals 检查对象相等性(或任何术语)的约定是)。
这是一个合理的担忧,还是我应该继续超载operator ==?
【问题讨论】:
-
顺便说一句,vb.net 禁止将其
=和<>相等运算符用于不提供显式重载的类型;要检查引用相等性,可以使用Is或IsNot,它们基本上总是 检查引用相等性(主要的例外是将可空类型与Nothing进行比较时)。
标签: c# operator-overloading equals