Это в порядке для выдачи исключения NotImplemented в виртуальных методах?

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

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

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

и в потомке у меня есть a

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

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

9
задан Axarydax 15 May 2010 в 19:10
поделиться

4 ответа

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

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

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

     ...
}
16
ответ дан 4 December 2019 в 06:08
поделиться

абстракция кажется именно тем, что вам действительно нужно.

9
ответ дан 4 December 2019 в 06:08
поделиться

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

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

base.Save()

и это каждый раз вызывает рвоту.

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

11
ответ дан 4 December 2019 в 06:08
поделиться

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

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

9
ответ дан 4 December 2019 в 06:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: