加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 00:17:20 所属栏目:百科 来源:网络整理
导读:假设您正在编写原始的C#Object类,并且您需要以下功能: object1 == object2将比较引用,除非重写此运算符 object1!= object2将始终返回对象的ACTUAL对象1 == object2的反转 因此,例如,如果我有一个使用ear length作为其equals方法的Bunny类(派生自Object),那
假设您正在编写原始的C#Object类,并且您需要以下功能:

> object1 == object2将比较引用,除非重写此运算符
> object1!= object2将始终返回对象的ACTUAL对象1 == object2的反转

因此,例如,如果我有一个使用ear length作为其equals方法的Bunny类(派生自Object),那么如果bunnies具有不同的ear长度,则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的Equals,而不是实际派生类的equals.

有没有什么方法可以在不以任何方式修改C#本身的情况下工作?我并不在乎C#中的可能性,但我关心是否有一些OOP原则告诉我我不应该期待这种事情能够发挥作用.

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

解决方法

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读