在该方法的覆盖中调用基本抽象方法

Zen*_*tzi -1 c# methods abstract

我在这里找到与我的问题类似的链接,但我似乎仍然无法理解某些内容。

public abstract class ClassA
{
     protected abstract void Method()
     {
        //some logic here
     }
}

public class ClassB : ClassA
{
     protected override void Method()
     {
          base.Method();
          // some custom logic here
     }
}
Run Code Online (Sandbox Code Playgroud)

这是我的情况,我似乎无法找出为什么我无法base.Method()从 ClassB 中的重写方法调用。错误说:“无法调用抽象基方法”。如果我不能调用它,为什么用逻辑填充和抽象基方法的功能甚至在那里?请有人向我解释我犯了什么错误,我该如何解决?

hel*_*elb 5

从 C# 规范:

抽象方法是没有实现的虚方法。抽象方法是用抽象修饰符声明的,并且只允许在同样声明为抽象的类中使用。在每个非抽象派生类中都必须覆盖抽象方法。

所以抽象方法无法实现。因此抽象方法不能有一个主体:

protected abstract void Method();
Run Code Online (Sandbox Code Playgroud)

如果要在基类中使用一些默认逻辑,则必须声明方法virtual

protected virtual void Method()
{
    //some logic here
}
Run Code Online (Sandbox Code Playgroud)