gpt4 book ai didi

c# - 即使我知道如何/何时重载 operator==,我为什么要这样做?

转载 作者:太空狗 更新时间:2023-10-29 20:11:15 26 4
gpt4 key购买 nike

假设我正在设计一个供其他人使用的对象集合,并且假设我已经阅读并理解(嗯?)关于 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com