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

时间:2015-01-05 15:03:46

标签: c# methods abstract

我发现here此链接与我的问题类似,但我似乎无法理解。

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
     }
}

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

3 个答案:

答案 0 :(得分:4)

来自C#规范:

  

抽象方法是一种没有实现的虚方法。一个   abstract方法是用abstract修饰符声明的,并且是   仅在同样被声明为abstract的类中允许。摘要   必须在每个非抽象派生类中重写方法。

因此无法实现抽象方法。因此抽象方法不能有一个正文:

protected abstract void Method();

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

protected virtual void Method()
{
    //some logic here
}

答案 1 :(得分:3)

关键字abstract意味着派生类必须实现该方法,但抽象类本身不提供任何实现(因此错误)。

我认为您可能正在寻找virtual,它们在基础级别提供了一些功能,并允许实现类来覆盖行为。

答案 2 :(得分:0)

来自MSDN Website

  

基本访问(Section 7.5.8)的编译时错误   引用抽象方法。在示例中

abstract class A 
{    
    public abstract void F();
}

class B: A 
{   
    public override void F() 
    {
        base.F(); // Error, base.F is abstract
    }
}
  

报告base.F()调用的编译时错误,因为   它引用了一种抽象方法。