假设我正在设计一个供其他人使用的对象集合,并且假设我已经阅读并理解(嗯?)关于 operator== 和 Equals() 之间差异的大多数线程,为什么我应该曾经实现过 operator== 吗?
从 this thread 中窃取示例, 使用它很容易出错:
object x = "hello";
object y = 'h' + "ello"; // ensure it's a different reference
(x == y); // evaluates to FALSE
string x = "hello";
string y = 'h' + "ello"; // ensure it's a different reference
(x == y); // evaluates to TRUE
那么,我可以告诉我的用户只使用 Equals() 和 ReferenceEquals() 吗?我在那里错过了什么?
是否有使用 == 的标准代码库片段,并且没有办法绕过它?
在某些重要 情况下,== 性能是否好很多? (好吧,好吧,Equals 是一个虚拟的,所以它会一直慢一点,但我看不到任何实际成为瓶颈的用例)
- 还有别的吗?
最佳答案
您可以告诉您的用户只使用Equals
...但我个人觉得它非常方便,各种类型(包括字符串
) 重载==
。是的,您需要了解重载解析的工作方式,但对于大多数有经验的开发人员来说,我怀疑大多数时候不是问题,而:
if (Equals(x, y))
最终看起来比
更难看if (x == y)
在我看来。请注意,这些都不同于
if (x.Equals(y))
当然,如果 x
为 null,它会爆炸......
如果您不希望重载 ==
那么它不会像任何事情都会失败 - 您可能会得到不满的用户。
关于c# - 即使我知道如何/何时重载 operator==,我为什么要这样做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9016843/