繁体   English   中英

C#继承问题

[英]C# Inheritance Problem

假设我有3个班级:

爷爷,爸爸和儿子。 儿子从父亲继承,父亲从祖父那里继承。

GrandDad有2种方法:

public virtual void foo();
public virtual void do();

爸爸继承了foo(),但是覆盖了do();

public override void do();

如果Son要修改foo(),则可以接受:

使爸爸覆盖foo(),但只需调用foo.base()? 然后,Son可以覆盖foo(),但是爸爸的foo()功能保持不变吗?

还是这是一种怪癖?

只要Dad从未定义过foo() ,他就没有理由要做任何事情。 Son应该能够从GrandDad覆盖foo()

Dad不必重写foo() 由于Dad只是继承了Granddad提供的版本(仍然是virtual ),因此这也意味着Son可以得到,从而允许Son覆盖foo()

public class Granddad {
    public virtual void foo() {...}
    public virtual void do() {...}
}

public class Dad {
    public override void do() {...}
}

public class Son {
    public override void foo() {...}
}

如果我了解您的问题,则无需与爸爸做任何事情。 只需在Son中实现foo()即可。

由于Son是父亲的后代,因此Son内的任何事物都不会改变父亲,因此,如果Son实现foo(),则父亲的foo()保持不变,继承自GrandDad。

问题的语义可能使您误入歧途。

如果您真的在做父亲,儿子,祖父...

您只需要上一堂课:人。 它将具有一个称为父亲的成员属性,该属性将指向另一个人。 这样,您可以拥有多代人,而不必被锁定在三代人中。

修改foo是什么意思? 如果要覆盖,则Son可以简单地覆盖foo() 无需让Dad重写foo()调用基本实现。

父亲不需要为儿子覆盖Foo而覆盖Foo。 Foo在继承链中一直是虚拟的,除非有人重写它并声明密封。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM