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

Axa*_*dax 9 c# polymorphism virtual module

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

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

public virtual void Save
{
    throw new NotImplementedException();
}
Run Code Online (Sandbox Code Playgroud)

在下降我有一个

public override void Save()
{
    //do stuff
}
Run Code Online (Sandbox Code Playgroud)

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

tva*_*son 16

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

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

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

     ...
}
Run Code Online (Sandbox Code Playgroud)


小智 11

不是个好主意.

通常,重写方法会通过调用基类方法

base.Save()
Run Code Online (Sandbox Code Playgroud)

那每次都会呕吐.

所以一般来说,坏主意.在你的情况下,它看起来像抽象将是更好的选择.


Sco*_*ttS 9

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


Ode*_*ded 9

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

这样,所有实现类型也必须实现此方法.