Конструкторы в производных классах

Конструкторы не передаются производному классу при наследовании. И если в базовом классе не опредлен конструктор по умолчанию без параметров, а только конструкторы с параметрами (как в случае с базовым классом Person), то в производном классе мы обязательно должны вызвать один из этих конструкторов через ключевое слово base. Например, из класса Employee уберем определение конструктора:

class Employee: Person

{

public string Company { get; set; }

}

В данном случае мы получим ошибку, так как класс Employee не соответствует классу Person, а именно не вызывает конструктор базового класса. Даже если бы мы добавили какой-нибудь конструктор, который бы устанавливал все те же свойства, то мы все равно бы получили ошибку:

public Employee(string fName, string lName, string comp)

{

FirstName = fName;

LastName = lName;

Company = comp;

}

То есть в классе Employee через ключевое слово base надо явным образом вызвать конструктор класса Person:

public Employee(string fName, string lName, string comp)

  : base(fName, lName)

{

Company = comp;

}

Либо в качестве альтернативы мы могли бы определить в базовом классе конструктор без параметров:

class Person

{

// остальной код класса

           // конструктор по умолчанию

           public Person()

{

   FirstName = "Tom";

   LastName = "Johns";

   Console.WriteLine("Вызов конструктора без параметров");

}

}

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

public Employee(string comp)

{

Company = comp;

}

Фактически был бы эквивалентен следующему конструктору:

public Employee(string comp)

          :base()

{

Company = comp;

}

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: