Прежде чем приступать к построению каких-то производных классов, следует уделить внимание одной детали. Поскольку первоначальный класс Employee
EmployeeApp, он находится внутри идентично названного пространства имен .NET Core. Пространства имен подробно рассматриваются в главе 16; тем не менее, ради простоты переименуйте текущее пространство имен (в обоих файлах) на Employees, чтобы оно совпадало с именем нового проекта:// Не забудьте изменить название пространства имен в обоих файлах С#!
namespace Employees
{
partial class Employee
{...}
}
На заметку!
Если вы удалили стандартный конструктор во время внесения изменений в код классаEmployee в главе 5, тогда снова добавьте его в класс.Вторая деталь касается удаления любого закомментированного кода из различных итераций класса Employee
На заметку!
В качестве проверки работоспособности скомпилируйте и запустите новый проект, введяdotnet run в окне командной подсказки (в каталоге проекта) или нажав <Ctrl+F5> в случае использования Visual Studio. Пока что программа ничего не делает, но это позволит удостовериться в отсутствии ошибок на этапе компиляции.Цель в том, чтобы создать семейство классов, моделирующих разнообразные типы сотрудников в компании. Предположим, что необходимо задействовать функциональность класса Employee
SalesPerson и Manager). Новый класс SalesPerson "является" Employee (как и Manager). Вспомните, что в модели классического наследования базовые классы (вроде Employee) обычно применяются для определения характеристик, общих для всех наследников. Подклассы (такие как SalesPerson и Manager) расширяют общую функциональность, добавляя к ней специфическую функциональность.В настоящем примере мы будем считать, что класс Manager
Employee, сохраняя количество фондовых опционов, тогда как класс SalesPerson поддерживает хранение количества продаж. Добавьте новый файл класса (Manager.cs), в котором определен класс Manager со следующим автоматическим свойством:// Менеджерам нужно знать количество их фондовых опционов.
class Manager : Employee
{
public int StockOptions { get; set; }
}
Затем добавьте еще один новый файл класса (SalesPerson.cs
SalesPerson с подходящим автоматическим свойством:// Продавцам нужно знать количество продаж.
class SalesPerson : Employee
{
public int SalesNumber { get; set; }
}
После того как отношение "является" установлено, классы SalesPerson
Manager автоматически наследуют все открытые члены базового класса Employee. В целях иллюстрации обновите операторы верхнего уровня, как показано ниже:// Создание объекта подкласса и доступ к функциональности базового класса.
Console.WriteLine("***** The Employee Class Hierarchy *****\n");
SalesPerson fred = new SalesPerson
{
Age = 31, Name = "Fred", SalesNumber = 50
};
Вызов конструкторов базового класса с помощью ключевого слова base
В текущий момент объекты классов SalesPerson
Manager могут создаваться только с использованием "бесплатно полученного" стандартного конструктора (см. главу 5). Памятуя о данном факте, предположим, что в класс Manager добавлен новый конструктор с шестью аргументами, который вызывается следующим образом:...
// Предположим, что у Manager есть конструктор с такой сигнатурой:
// (string fullName, int age, int empId,
// float currPay, string ssn, int numbOfOpts)
Manager chucky = new Manager("Chucky", 50, 92, 100000, "333-23-2322", 9000);
Взглянув на список параметров, легко заметить, что большинство аргументов должно быть сохранено в переменных-членах, определенных в базовом классе Employee
Manager можно было бы реализовать показанный ниже специальный конструктор:public Manager(string fullName, int age, int empId,