Конструктор абстрактного класса в C#
Абстрактный класс вполне может иметь конструктор и поля, как обычный тип.
Общие данные задают в родителе, а потомок в
вызове base передает аргументы
конструктору базы. Запишем User с именем
в конструкторе и выведем его у Employee:
abstract class User
{
public string Name = "";
public User(string name)
{
Name = name;
}
public abstract void IncreaseRevenue(int value);
}
class Employee : User
{
public int Salary;
public Employee(string name, int salary)
: base(name)
{
Salary = salary;
}
public override void IncreaseRevenue(int value)
{
Salary += value;
}
}
Создадим объект класса Employee и выведем имя вместе с окладом:
var employee = new Employee("john", 1000);
Console.WriteLine(employee.Name);
Console.WriteLine(employee.Salary);
При создании Employee сначала выполняется
конструктор User, затем инициализируются
поля сотрудника. Абстрактные методы родителя по-прежнему
ждут реализации в потомке, но общее состояние
уже готово к работе.
Сделайте абстрактный класс User
с конструктором, принимающим имя.
Сделайте Employee с конструктором
имени и зарплаты и передайте имя
в конструктор родителя.
Сделайте Student с конструктором
имени и стипендии, передайте имя
в User и реализуйте
IncreaseRevenue.
Создайте по одному объекту Employee
и Student, вызовите у них
IncreaseRevenue и выведите
итоговую зарплату и стипендию.