【问题标题】:Is it ok to throw NotImplemented exception in virtual methods?在虚拟方法中抛出 NotImplemented 异常可以吗?
【发布时间】:2011-02-19 22:45:17
【问题描述】:

我有一些插件风格的东西的基类,并且有一些方法是绝对需要实现的。

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

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

然后我有一个

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

在那里扔NotImplementedException 是个好习惯吗?例如,后代类可以是用于处理不同文件格式的模块。谢谢

【问题讨论】:

    标签: c# polymorphism virtual module


    【解决方案1】:

    不是个好主意。

    通常,重写方法会通过

    调用基类方法
    base.Save()
    

    而且每次都会呕吐。

    一般来说,这是个坏主意。在您的情况下,将其抽象化似乎是更好的选择。

    【讨论】:

      【解决方案2】:

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

      这样所有实现类型也必须实现这个方法。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2017-01-04
            • 2012-02-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-03-25
            • 1970-01-01
            相关资源
            最近更新 更多