Принудительная реализация двух методов в дочернем классе - PullRequest
0 голосов
/ 28 марта 2012

У меня есть абстрактный метод в базовом классе, объявленный так ...

public abstract void StartHere();
public virtual void StartHere(string flag)
{   
    switch(flag)
    {
        default : StartHere(); break;
    }
}

Есть ли способ изменить его так, чтобы наследующий дочерний класс был вынужден реализовывать один или другой, но не оба? В настоящее время дочерний класс вынужден реализовывать только StartHere ().

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

Функция этого метода заключается в настройке класса, программист может выполнить простую настройку, используя StartHere (), или более сложную, установив флаг StartHere (string).

Спасибо!

Ответы [ 2 ]

3 голосов
/ 28 марта 2012

Как правило, было бы целесообразно, чтобы функция без параметров вызывала функцию Para-Metered, передавая значения по умолчанию. Это называется цепочкой функций.

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

Я бы предпочел другой дизайн, что-то вроде:

public void StartHere();
public virtual void StartHere(string flag)
{
    StartHere();
}

Поскольку в этом случае родительский класс и дочерние классы более слабо связаны: родительский класс не должен ничего знать о флаге * *, который интересует только дочерние классы. .

Если вам по какой-то причине необходимо следовать вашему текущему дизайну, я предлагаю вам хотя бы изменить следующие строки:

    switch(flag)
    {
        default : StartHere(); break;
    }

что-то вроде:

    switch(flag)
    {
        "DEFAULTFLAG" : StartHere(); break;
        default : throw ArgumentException(
            String.Format("Unrecognized flag '{0}'!", flag)
            );
    }

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

...