我发现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()
。错误说:"无法调用抽象基本方法"。如果我不能调用它为什么填充和抽象基本方法的功能甚至在那里?可以请有人向我解释我犯的错误是什么以及如何解决?
答案 0 :(得分:4)
来自C#规范:
抽象方法是一种没有实现的虚方法。一个 abstract方法是用abstract修饰符声明的,并且是 仅在同样被声明为abstract的类中允许。摘要 必须在每个非抽象派生类中重写方法。
因此无法实现抽象方法。因此抽象方法不能有一个正文:
protected abstract void Method();
如果您想在基类中使用某些默认逻辑,则必须声明方法virtual
:
protected virtual void Method()
{
//some logic here
}
答案 1 :(得分:3)
答案 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()
调用的编译时错误,因为 它引用了一种抽象方法。