假设我正在设计一个供其他人使用的对象集合,并假设我已阅读并理解(呵呵?)关于operator ==和Equals()之间差异的大多数线程,为什么我应该实现operator ==?
从这个线程中窃取一个例子,使用它可能非常容易出错:
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
Run Code Online (Sandbox Code Playgroud)
那么,我可以告诉我的用户只使用Equals()和ReferenceEquals(),那就是它吗?我在那里错过了什么?
是否有可能使用==的标准代码库的部分并且没有办法绕过它?
在某些重要案例中,==表现更好吗?(好吧,好吧,Equals是虚拟的,所以它总是会慢一点,但我看不出任何实际上成为瓶颈的用例)
您可以告诉您的用户只是使用Equals...但我发现它非常方便各种类型(包括String)过载==.是的,您需要了解重载解析的工作方式,但对于大多数有经验的开发人员,我怀疑大多数时候这不是问题,而是:
if (Equals(x, y))
Run Code Online (Sandbox Code Playgroud)
最终看起来更糟糕
if (x == y)
Run Code Online (Sandbox Code Playgroud)
在我看来.请注意,这些都是不同的
if (x.Equals(y))
Run Code Online (Sandbox Code Playgroud)
如果x是空的话会爆炸,当然......
如果你不想超载,==那么就不会有任何事情会失败 - 你可能会让心怀不满的用户感到沮丧.