错误CS0534 - 未实现继承的抽象成员

时间:2016-11-30 14:01:10

标签: c# abstract-class

我有以下4个课程:

public abstract class Base
{
     abstract public void DoIt();
}

public class TW: Base {}
public class RW: TW 
{
    public override void DoIt() {}
}
public class IW: TW
{
    public override void DoIt() {}
}

用法:

var transaction = new TW();
transaction.DoIt();

我不清楚为什么会收到以下错误:

  

错误CS0534'TW'未实现继承的抽象成员   'Base.DoIt()'

如果所有“离开”派生类(RW和IW)都覆盖它,为什么(TW)还需要覆盖它?我可能会遗漏一些东西,因为我记得它不是必须的。我不想在TW中覆盖它,因为我没有任何有效的实现来写它。

我原本希望有能力写下这样的东西:

public override abstract void DoIt();

正确的实施是什么?

更新

根据我得到的答案,由于某些限制,我必须按照以下方式实施:

public override void DoIt()
{
    //Not getting to this code, it is overriden by the derived classes
}

这可以接受吗? 我觉得如果我遇到这样的情况,建筑中的某些东西可能就错了。

3 个答案:

答案 0 :(得分:4)

你也必须使TW成为一个抽象类。

public abstract class Base
{
     public abstract void DoIt();
}

public abstract class TW: Base {}

public class RW: TW 
{
    public override void DoIt() {}
}

public class IW: TW
{
    public override void DoIt() {}
}

答案 1 :(得分:1)

由于您编辑了问题:这是一个新的答案......

var transaction = new TW();
transaction.DoIt();  // compiler error because this method does not really exist.

在您的代码示例中,TW继承自Base。在Base中,您将DoIt()声明为抽象方法。这意味着它没有实现,它只是一个接口。你必须在继承的类中实现该方法,否则编译器会抱怨。

答案 2 :(得分:1)

如果您不希望TW成为抽象类,但您不想提供DoIt的“真实”实现,那么您应该在{{1}中抛出异常而不是返回。

DoIt