C#:有什么方法可以跳过多态性中的一个基本调用?

标签 c# inheritance polymorphism overriding virtual-functions

class GrandParent
{
    public virtual void Foo() { ... }
}

class Parent : GrandParent
{
    public override void Foo()
    {
       base.Foo();

       //Do additional work
    }
}

class Child : Parent
{
    public override void Foo()
    {
        //How to skip Parent.Foo and just get to the GrandParent.Foo base?

        //Do additional work
    }
}

如上面的代码所示,如​​何让 Child.Foo() 调用 GrandParent.Foo() 而不是调用 Parent.Foo()? base.Foo() 首先将我带到父类。

最佳答案

如果你需要这个,你的设计是错误的。
相反,将每个类的逻辑放在 DoFoo 中,并且在不需要时不要调用 base.DoFoo

class GrandParent
{
    public void Foo()
    {
        // base logic that should always run here:
        // ...

        this.DoFoo(); // call derived logic
    }

    protected virtual void DoFoo() { }
}

class Parent : GrandParent
{
    protected override void DoFoo()
    {    
       // Do additional work (no need to call base.DoFoo)
    }
}

class Child : Parent
{
    protected override void DoFoo()
    {  
        // Do additional work (no need to call base.DoFoo)
    }
}

关于C#:有什么方法可以跳过多态性中的一个基本调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913569/

相关文章:

c# - 从 ReadOnlySequence<byte> 获取连续的 Memory<byte>

c# - 连接具有一对多关系的两个列表

java - 为什么类不能扩展枚举?

javascript - 无法在构造函数原型(prototype)中调用 'this'

collections - 在异构 Rust 集合中使用 Any trait 对象有什么问题?

c++ - 在 C++ 中使用多态性访问类的孙子类

python - 多态映射类型

c# - wpf 验证 - 我怎样才能让这个代码在输入发生时触发验证(离开字段时比较)

python - Pandas DataFrame 对象继承还是对象使用?

c# - 建立一个安全库,我想我过度 build 了