假设您正在编写原始 C#Object
类并且您想要以下功能:
-
object1 == object2
将比较引用,除非该运算符被覆盖
-
object1 != object2
将始终返回对象实际值的倒数object1 == object2
所以,举例来说,如果我有一个Bunny
类(源自Object
)使用耳朵长度作为其 equals 方法,然后是 notequals 方法(继承自Object
) 如果兔子的耳朵长度不同,则应返回 true。
我看到的问题是,如果我写我的Object
类类似:
public partial class Object {
public virtual bool Equals(Object o2) {
return (this === o2);
}
public bool NotEquals(Object o2) {
return !this.Equals(o2);
}
}
那么看起来该定义会将 NotEquals 绑定到Object
的等于,而不是实际派生类的等于。
有什么方法可以在不以任何方式修改 C# 本身的情况下实现这一点吗?我不太关心它在 C# 中是否可能,但我关心是否有一些 OOP 原则告诉我我不应该期望这种事情能够起作用。
另外,我不确定这是否是问题的基础,但这个想法是 NotEquals 也是虚拟的,这样它也可以被想要其值的派生类覆盖。o1 != o2
不同于!(o1 == o2)
。这个问题的灵感来自于最近的讨论 https://stackoverflow.com/questions/6916884/why-must-we-define-both-and-in-c/.
您提供的代码will调用派生的Equals
方法。Equals
是虚拟的,这意味着当调用它时,将使用“最派生”的实现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)