gpt4 book ai didi

c# - 为什么默认 == 实现不调用 Equals?

转载 作者:IT老高 更新时间:2023-10-28 20:35:28 26 4
gpt4 key购买 nike

Possible Duplicate:
Why ReferenceEquals and == operator behave different from Equals

== 操作符的默认实现是通过引用比较对象。因此,当您覆盖 Equals (默认行为相同)时,您还必须指定 ==!= 运算符以便它们调用 Equals (并在每个类中进行==!= 运算符不是虚拟的)。

我的问题是为什么会这样?为什么 ==!= 通过引用而不是使用 Equals 来比较对象?我想这样一个根本的事情应该是有原因的。

更新。

评论:我假设 == 应该依赖于 Equals(反之亦然),因为您可以在基类中覆盖 Equals 并在派生类中自动使用此实现。如果 Equals 在其实现中使用 == 它将无法工作,因为 == 不是虚拟的。

最佳答案

我认为主要原因是 == 是一个 static 运算符,并且可以在 null 对象上调用而 Equals 需要一个实例

例如:

Foo foo1 = null;
Foo foo2 = null;

Console.WriteLine(foo1 == foo2); // cannot use Equals

关于c# - 为什么默认 == 实现不调用 Equals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10109738/

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