我有以下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
}
这可以接受吗? 我觉得如果我遇到这样的情况,建筑中的某些东西可能就错了。
答案 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