抽象类:当子类未正确实现时,我应该抛出哪个异常?

时间:2012-03-22 19:00:01

标签: .net exception inheritance abstract-class

假设我有一个抽象类:

abstract class MyAbstract
{
    protected abstract object ImplementMePlz();

    public object DoSomething()
    {
        // Some logic here

        var result = ImplementMePlz();
        if (result == null)
            throw new YourChildClassIsStupidException("ImplementMePlz() should never return null.");

        return result;
    }
}

在这种情况下我应该抛出什么样的异常? .NET框架中是否有指定的异常,还是应该创建自己的自定义异常?

3 个答案:

答案 0 :(得分:4)

问题的答案“.NET框架中是否存在指定的异常?”是“不” - 没有这样的例外。

如果我是你,我会创建一个自定义例外。

答案 1 :(得分:1)

您应该创建自己的异常类。我知道处理这种情况的框架也不例外。为什么?我认为框架不需要这个例外。

另外,我建议首先使用Code Contracts来防止异常。

答案 2 :(得分:0)

这取决于您的子类返回null的原因。在子类中抛出异常可能更有意义,因为它可以更好地理解为什么它返回null并且可以产生更具信息性的异常。

如果您无法控制子类,那么您应该做两件事之一。

  1. 您可以从null返回中推断出一些信息。您应该创建一个传递该知识的例外,例如API声明如果其中一个输入无效,则应返回null,抛出InvalidArgumentExpection。

  2. 你只知道它不应该为null,如果是这种情况,抛出ArgumentNull异常或类似的东西