如何调用声明为抽象覆盖的基本方法

时间:2017-02-16 10:22:02

标签: c# oop inheritance override abstract

在C#中,可以标记虚方法摘要以强制继承类来实现它。

class A
{
    public virtual void Method()
    {
        Console.WriteLine("A method call");
    }
}

abstract class B : A
{
    // Class inherited from B are forced to implement Method.
    public abstract override void Method();
}

我想从继承自A的类中调用Method B的实现。

class C : B
{
    public override void Method()
    {
        // I would like to call A implementation of Method like this:
        // base.base.Method();
    }
}

我发现这样做的最好方法是在A实现中添加一个受保护的方法“MethodCore”,并在需要时调用它。

class A
{
    public virtual void Method()
    {
        MethodCore();
    }

    protected void MethodCore()
    {
        Console.WriteLine("A method call");
    }
}

abstract class B : A
{
    public abstract override void Method();
}

class C : B
{
    public override void Method()
    {
        MethodCore();
    }
}

还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

  

我发现这样做的最好方法是在A实现中添加一个受保护的方法“MethodCore”,并在需要时调用它。

是。由于您无法使用abstract调用base方法,因此所有可能的解决方案都要求您最终使用Method实例在A中调用A

也就是说,看起来您正在寻找一种在Method中提供B默认实现的方法,以便B的任何子类都可以没有实现该方法应该只使用A中的实现。更好的解决方案是不在Method中将abstract标记为B。相反,使用Method <{1}} B中的Method A重定向到base.Method() {/ 1}}

abstract class B : A {
// Class inherited from B are forced to implement Method.
   public virtual void Method() { 
        base.Method()//calls Method in A
   }
}

这样,任何想要从B拨打Method的{​​{1}}的子类都可以简单地说A