gpt4 book ai didi

c# - 从父类调用重写的虚方法

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

假设您正在编写原始 C# Object类,您需要以下功能:

  1. object1 == object2将比较引用,除非此运算符被覆盖
  2. object1 != object2将始终返回对象的 ACTUAL 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 绑定(bind)到 Object的等于,而不是实际派生类的等于。

有没有什么方法可以在不以任何方式修改 C# 本身的情况下工作?我不太关心它在 C# 中是否可行,但我关心是否有一些 OOP 原则告诉我我不应该期望这种事情会起作用。

此外,我不确定这是否是问题的基础,但想法是 NotEquals 也是虚拟的,这样它也可以被需要 o1 != o2 的派生类覆盖。不同于!(o1 == o2) .这个问题的灵感来自 this recent discussion .

最佳答案

您提供的代码调用派生的Equals 方法。 Equals 是虚拟的,这意味着当它被调用时,将使用“最派生”的实现。

关于c# - 从父类调用重写的虚方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6919259/

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