可以在虚拟方法中抛出NotImplemented异常吗?

时间:2010-05-15 19:11:00

标签: c# polymorphism virtual module

我有一些插件样式的基类,并且有一些方法绝对需要实现。

我目前将基类中的那些声明为虚拟,例如

public virtual void Save
{
    throw new NotImplementedException();
}

在下降中我有一个

public override void Save()
{
    //do stuff
}

在那里抛出NotImplementedException是一个好习惯吗?例如,下降类可以是用于处理不同文件格式的模块。感谢

4 个答案:

答案 0 :(得分:14)

一般来说,我希望您的基类是抽象的,只需将实现推迟到继承类。

public abstract class MyBase
{
    public abstract void Save();
    ...
}

public class MyChild : MyBase
{
     public override void Save()
     {
         ... save ...
     }

     ...
}

答案 1 :(得分:10)

不是个好主意。

通常,重写方法会通过

调用基类方法
base.Save()

每次都会呕吐。

总的来说,糟糕的主意。在你的情况下,它看起来像抽象将是更好的选择。

答案 2 :(得分:8)

抽象似乎是你真正追求的。

答案 3 :(得分:8)

将它声明为抽象方法不是更好吗?

这样,所有实现类型都必须实现此方法。