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()首先带我进入Parent类。

最佳答案

如果需要,您的设计是错误的。
而是将每个类的逻辑放在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/

10-09 15:42