2015-01-05 42 views
-3

我发现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 
    } 
} 

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

+6

抽象方法不能有一个主体。让它虚拟。 – CodeCaster

+0

你不能给抽象的方法一个身体,你为什么认为你可以? –

+1

您的代码无法编译。抽象方法不能有体。 – haim770

回答

4

从C#规格:

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

所以一个抽象方法无法实施。抽象方法,因此不能有一个身体:

protected abstract void Method(); 

如果你想在基类中的一些默认的逻辑,你必须声明的方法virtual

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

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

我想你可能会寻找virtual这两者提供的基本级别的一些功能,并允许实现类重写的行为。

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()调用,因为 它引用一个抽象方法的编译时间错误。

相关问题