это хорошая практика проектирования, чтобы иметь только конструктор базового класса без параметров? - PullRequest
4 голосов
/ 22 марта 2010

В конструкторах базового класса я всегда вижу конструктор без параметров, например:

   public abstract BaseClass {...
protected BaseClass() { }
...}

но допустимо ли включение параметра в конструктор базового класса?

   public abstract BaseClass {...
protected BaseClass(string initObj) { }
...}

Ответы [ 6 ]

12 голосов
/ 22 марта 2010

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

2 голосов
/ 22 марта 2010

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

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

2 голосов
/ 22 марта 2010

Это хорошая практика, если объект не может быть использован или имеет зависимости от каждого метода в этом классе. Например, если у вас есть класс с одинаковыми параметрами во всех функциях, было бы лучше установить его в конструкторе, чтобы сигнатура функции была меньше.

2 голосов
/ 22 марта 2010

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

public employee(int age) : base(this)

Ответ: если вам нужен один, просто добавьте его, в этом нет ничего плохого. Подумайте о базовом классе бизнес-объектов, который требует некоторых проверок, чтобы сказать номер телефона или адрес электронной почты. Вы хотите, чтобы производные классы загружали эти бизнес-правила в них. Если у вас не было конструктора базового класса, вы не могли бы добавить эти правила к своим объектам производного класса.

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

Да, это вполне приемлемое проектное решение, только оно должно иметь смысл для базового класса - предположительно инициализировать свои собственные члены из параметра. Кроме того, он накладывает ограничение на производные классы: либо они должны передавать литерал, либо накладывать аналогичное ограничение на своих клиентов или другие производные классы.

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

Это, безусловно, приемлемо.Необходим ли он или полезен, полностью зависит от (замысла) классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...