#c_sharp #ооп #наследование
Мучаю наследование. Стакнулся на моменте использования конструктора базового класса в производном. Базовый класс: namespace ConsoleApp12 { class Employee { public string Name { get; set; } public float Pay { get; set; } public int Age { get; set; } public Employee() { } public Employee(string name, int age, float pay) { Name = name; Age = age; Pay=pay; } } } Производный: namespace ConsoleApp12 { class Manager : Employee { public int SalaryIndex { get; set; } public Manager(int salIndex) : base(name, age, pay) { } } } Получаю ошибку: Кто может объяснить что я делаю не так?
Ответы
Ответ 1
Вы вызываете конструктор базовогo класса, передавая туда в качестве параметров переменные, которых в этом месте нет. class Manager : Employee { public int SalaryIndex { get; set; } public Manager(int salIndex) : base() { SalaryIndex = salIndex; } public Manager(int salIndex, string name, int age, float pay) : base(name, age, pay) { SalaryIndex = salIndex; } }Ответ 2
Если в потомке уже определены некоторые параметры базового класса (например, есть значения по умолчанию, либо значения вычисляются из других параметров), то, если эти свойства не приватные, их можно инициализировать в конструкторе потомка. class Manager : Employee { public int SalaryIndex { get; set; } public Manager(int salIndex) : base() { SalaryIndex = salIndex; Name = "Имя по умолчанию"; Age = 20; Pay = 1000 * Age; } }
Комментариев нет:
Отправить комментарий