Можно ли генерировать исключение NotImplemented в виртуальных методах? - PullRequest
9 голосов
/ 15 мая 2010

У меня есть базовый класс для некоторых вещей в стиле плагина, и есть некоторые методы, которые абсолютно необходимы для реализации.

В настоящее время я объявляю их в базовом классе как виртуальные, например

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

и по убыванию у меня есть

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

Это хорошая практика - бросать туда NotImplementedException? Классы-потомки могут быть, например, модулями для работы с различными форматами файлов. Спасибо

Ответы [ 4 ]

15 голосов
/ 15 мая 2010

Обычно я ожидаю, что ваш базовый класс будет абстрактным и просто отложит реализацию до наследующих классов.

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

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

     ...
}
11 голосов
/ 15 мая 2010

Не очень хорошая идея.

Обычно переопределяющие методы вызывали бы метод базового класса через

base.Save()

, и это вызывало бы рвоту каждый раз.

Так обычно, плохая идея.В вашем случае, похоже, что сделать его абстрактным было бы лучшим выбором.

8 голосов
/ 15 мая 2010

Не лучше ли объявить его абстрактным методом?

Таким образом, все типы реализации также должны будут реализовывать этот метод.

8 голосов
/ 15 мая 2010

Аннотация - это то, что вы действительно ищете.

...