2014-02-01 16 views
1

У меня проблема с одним из приложений C#, которые я поддерживаю. Я вижу то, чего не понимаю, поэтому я хотел бы попросить разъяснений. Это может быть или не быть связано с проблемой, которую я испытываю.Использование базового конструктора

class C2iModel 
{ 
    public C2iModel() { //blah } 
} 

class EplrsModel : C2iModel 
{ 
    public EplrsModel() : base() { //blah } 
} 

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

Вопрос в том, имеет ли значение какой-либо явный вызов базового конструктора в конструкторе EplrsModel?

+0

Родительские типы [* по умолчанию * Конструктор] (http://msdn.microsoft.com/en-us/library/ms173115.aspx) используется, если нет 'base' указано, и являющийся тем, у которого нет параметров, является тем же конструктором, который использует 'base()'. Из ссылки «В производном классе, если конструктор базового класса не вызывается явно, используя ключевое слово base, конструктор по умолчанию, если он есть, называется неявным. Это означает, что следующие объявления конструктора [с и без' base() '] фактически одинаковы». – user2864740

+0

В этом конкретном случае (без параметров ctor) это абсолютно не имеет значения. –

ответ

2

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

class Base { 

    public Base(string type) { ... } 
} 

class Extend : Base { 

    public Extend(string type, string name) : base(type) { ... } 

} 
2

Да, этот бит кода является избыточным.

+0

Вы уверены, что родительский конструктор дважды не вызывается конструктором EplrsModel? –

+1

Он не вызывается дважды. Создание единого экземпляра EplrsModel означает, что конструкторы вызываются только один раз. – xbonez

+0

Никаких конструкторов не вызывается дважды, и для каждого класса вызывается хотя бы один конструктор, вы можете быть в этом уверены. –

Смежные вопросы