gpt4 book ai didi

c# - 我应该重载 == 运算符吗?

转载 作者:行者123 更新时间:2023-11-30 13:34:54 25 4
gpt4 key购买 nike

== 运算符在 C# 中的真正作用是什么?如果它用于比较类 A 的对象,它会尝试匹配所有 A 的属性,还是会寻找指向相同内存位置的指针(或者可能别的)?

让我们创建一个假设示例。我正在编写一个利用 Twitter API 的应用程序,它有一个 Tweet 类,它具有单个推文的所有属性:文本、发件人、日期和时间、来源等。如果我想比较类 Tweet 的对象是否等价,我可以只使用:

Tweet a, b;
if (a == b)
{
//do something...
}

ab 之间Tweet 类的检查所有属性的等价性吗?

如果不是,正确的方法是重载 == 运算符 以显式检查所有字段的等价性吗?

更新:根据前两个答案,我的假设是否正确:

  • 如果== 运算符或Equals 方法没有为类重载,== 运算符为对象 使用类。
  • object 类的 == 运算符检查内存位置是否相等。
  • 我必须重载 == 运算符或 Equals 方法才能完成此任务。
  • 在重载中,我必须手动检查属性的等价性,所以没有办法半自动地做,比如说,在循环中,对吧?

更新#2:Yuriy 发表评论说可以使用反射检查== 运算符中属性的等价性.如何才能做到这一点?你能给我一些示例代码吗?谢谢!

最佳答案

对于引用类型,== 运算符和 Equals() 方法的默认实现将简单地检查两个对象是否具有相同的引用,因此同一个实例。

如果你想检查两个不同对象的内容是否相等,那么你必须自己编写代码来完成,无论是哪种方式。可以用反射来处理(MbUnit 测试框架按照这些思路做了一些事情)但是会带来严重的性能损失,而且很有可能它无论如何都不会像你期望的那样,你应该实现 ==EqualsGetHashCode 手工操作。

关于c# - 我应该重载 == 运算符吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1640988/

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