Абстрактный класс: какое исключение я должен выбросить, если дочерние классы не реализованы правильно? - PullRequest
4 голосов
/ 22 марта 2012

Допустим, у меня есть абстрактный класс:

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 Framework или я должен создать собственное исключение?

Ответы [ 3 ]

4 голосов
/ 22 марта 2012

Ответ на вопрос «Есть ли обозначенное исключение в .NET Framework?»«нет» - такого исключения нет.

На вашем месте я бы создал собственное исключение.

1 голос
/ 22 марта 2012

Вы должны создать свой собственный класс исключений.Фреймворк не имеет исключений, о которых я знаю, чтобы справиться с этой ситуацией.Зачем?Я не думаю, что фреймворк нуждается в этом исключении.

Кроме того, я бы предложил использовать Кодовые контракты для предотвращения исключения в первую очередь.

0 голосов
/ 22 марта 2012

Это зависит от того, почему ваш дочерний класс возвратил ноль. Возможно, имеет смысл сгенерировать исключение в дочернем классе, так как у него будет более четкое представление о том, почему он возвращает ноль и может создать более информативное исключение.

Если у вас нет контроля над дочерним классом, вам следует выполнить одно из двух действий.

  1. Вы можете вывести некоторую информацию из нулевого возврата. Вы должны создать исключение, которое передает эти знания, например, API заявляет, что вы должны вернуть значение NULL, если один из ваших входных данных недействителен, выдать InvalidArgumentExpection.

  2. Вы просто знаете, что оно не должно быть нулевым, если в этом случае выдается исключение ArgumentNull или что-то подобное

...