如何==
运算符在 C# 中真的起作用吗?如果它用于比较类的对象A,它会尝试匹配所有A的属性,还是会寻找指向同一内存位置(或者可能是其他位置)的指针?
让我们创建一个假设的例子。我正在编写一个利用 Twitter API 的应用程序,它有一个Tweet类,它具有单个推文的所有属性:文本、发件人、日期和时间、来源等。如果我想比较类的对象Tweet为了等效,我可以使用:
Tweet a, b;
if (a == b)
{
//do something...
}
那会吗检查所有属性的等价性 of the Tweet类之间a and b?
If not, 正确的方法是超载==
操作员明确检查所有字段的等效性?
UPDATE:从前两个答案来看,我的假设是否正确:
- If the
==
运算符或Equals方法没有被类重载,==
运算符为object使用类。
- The
==
运算符为object类检查内存位置是否相等。
- 我必须超载
==
操作员或Equals方法来完成这个任务。
- 在重载中,我必须手动检查属性的等效性,所以没有办法半自动地完成它,比如说,在循环中, right?
更新#2:Yuriy 评论说可以检查属性中的等价性==
运算符与反射。如何才能做到这一点?你能给我一些示例代码吗?谢谢!
对于引用类型,两者的默认实现==
运营商和Equals()
方法将简单地检查两个对象是否具有相同的引用,因此是相同的实例。
如果您想检查两个不同对象的内容是否相等,那么您必须以一种或另一种方式自己编写代码来执行此操作。可以通过反射来完成(MbUnit http://www.mbunit.com/测试框架做了一些类似的事情),但是性能会受到严重影响,并且很有可能它不会完全达到您的预期,因此您应该实现==
or Equals
and GetHashCode
用手。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)