在重写基抽象方法时调用该方法

本文关键字:调用 方法 抽象方法 重写 | 更新日期: 2023-09-27 18:36:11

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

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()。错误说:"无法调用抽象基方法"。如果我不能调用它,为什么填充和抽象基本方法的功能甚至存在逻辑?请有人向我解释我犯的错误是什么以及如何解决它吗?

在重写基抽象方法时调用该方法

从 C# 规范:

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

因此,抽象方法无法实现。因此,抽象方法不能有主体:

protected abstract void Method();

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

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

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

我认为您可能正在寻找既在基本级别提供一些功能又允许实现类来覆盖行为virtual

来自 MSDN 网站:

对于

基本访问(第 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()调用报告编译时错误,因为 它引用了一个抽象方法。