Управление созданием базовых классов с помощью base
Управление созданием базовых классов с помощью base
В настоящий момент SalesPerson и Manager можно создать только с помощью конструктора, заданного по умолчанию. Поэтому предположим, что в тип Manager добавлен новый конструктор с шестью аргументами, который вызывается так, как показано ниже.
static void Main(string[] args) {
// Предположим, что есть следующий конструктор с параметрами
// (имя, возраст, ID, плата, SSN, число опционов).
Manager chucky = new Manager("Chucky", 35, 92, 100000, "333-23-2322", 9000);
}
Если взглянуть на список аргументов, можно сразу понять, что большинство из них должно запоминаться в членах-переменных, определенных базовым классом Employee. Для этого вы могли бы реализовать этот конструктор так, как предлагается ниже.
// Если не указано иное, конструктор подкласса автоматически вызывает
// конструктор базового класса, заданный по умолчанию.
public Manager(string fullName, int age, int empID, float currPay, string ssn, ulong numbOfOpts) {
// Это наш элемент данных.
numberOfOptions = numbOfOpts;
// Использование членов, наследуемых от Employee,
// для установки данных состояния.
ID = empID;
Age = age;
Name = fullName;
SocialSecurityNumber = ssn;
Pay = currPay;
}
Строго говоря, это допустимый, но не оптимальный вариант. В C#, если вы не укажете иное, конструктор базового класса, заданный по умолчанию, вызывается автоматически до выполнения логики любого пользовательского конструктора Manager. После этого текущая реализация получает доступ к множеству открытых свойств базового класса Employee, чтобы задать его состояние. Поэтому здесь при создании производного объекта вы на самом деле "убиваете семь зайцев" (пять наследуемых свойств и два вызова конструктора)!
Чтобы оптимизировать создание производного класса, вы должны реализовать свои конструкторы подклассов так, чтобы явно вызвался подходящий пользовательский конструктор базового класса, а не конструктор, заданный по умолчанию. Таким образом можно уменьшить число вызовов инициализации наследуемых членов (что экономит время). Позвольте для этого модифицировать пользовательский конструктор.
// На этот раз используем ключевое слово C# "base" для вызова
// пользовательского конструктора с базовым классом.
public Manager (string fullName, int age, int empID, float currPay, string ssn, ulong numbOfOpts): base(fullName, age, empID, currPay, ssn) {
numberOfOptions = numbOfOpts;
}
Здесь конструктор был дополнен довольно запутанными элементами синтаксиса. Непосредственно после закрывающей скобки списка аргументов конcтруктора стоит двоеточие, за которым следует ключевое слово C# base. В этой ситуации вы явно вызываете конструктор с пятью аргументами, определенный классом Employees избавляясь от ненужных вызовов в процессе создания дочернего класса.
Конструктор SalesPerson выглядит почти идентично.
// Как правило, каждый подкласс должен явно вызывать
// подходящий конструктор базового класса.
public SalesPerson(string fullName, int age, int empID, float currPay, string ssn, int numbOfSales): base(fullName, age, empID, currPay, ssn) {
numberOfSales = numbOfSales;
}
Вы должны также знать о том. что ключевое слово base можно использовать всегда, когда подклассу нужно обеспечить доступ к открытым или защищенным членам, определённым родительским классом. Использование этого ключевого слова не ограничено логикой конструктора. В нашем следующем обсуждении полиморфизма вы увидите примеры, в которых тоже используется ключевое слово base.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Управление сертификатами с помощью ММС
Управление сертификатами с помощью ММС Для того чтобы посмотреть свойства созданных сертификатов, нам потребуется запустить консоль управления Microsoft Management Console (ММС) — инструмент для создания, сохранения и открытия средств администрирования (называемых консолями (Snap-in)
Управление привязкой стилевых классов
Управление привязкой стилевых классов Привязка и "отвязка" стилевых классов — одна из самых часто выполняемых в Web-сценариях операций. Было бы странно, если библиотека Ext Core не предоставляла средств для ее выполнения.Методы объекта Element, которые мы сейчас рассмотрим,
Управление привязкой стилевых классов
Управление привязкой стилевых классов Привязка и "отвязка" стилевых классов — одна из самых часто выполняемых в Web-сценариях операций. Было бы странно, если библиотека Ext Core не предоставляла средств для ее выполнения.Методы объекта Element, которые мы сейчас рассмотрим,
R.12.6.2 Инициализация членов и базовых классов
R.12.6.2 Инициализация членов и базовых классов В определении конструктора можно задать инициализацию прямых базовых классов и членов, не наследуемых из базовых классов. Это особенно полезно для тех объектов, констант и ссылок, для которых различаются семантики
Управление потоком с помощью Go То
Управление потоком с помощью Go То Если ваша программа вдруг стала неуправляемой, укажите ей, куда идти, - с помощью передачи управления другому участку программного кода в процедуре. Оператор Go To в совокупности со специальным оператором метки в месте назначения позволяет
Управление базами данных с помощью VBA
Управление базами данных с помощью VBA Если вы собираетесь использовать VBA для работы с данными, хранящимися в "реальных" базах данных типа файлов Microsoft Jet (формат баз данных, используемыхAccess), SQL Server или dBase, то вам, мой друг, определенно потребуется помощь. И придет она от
50. Делайте деструкторы базовых классов открытыми и виртуальными либо защищенными и невиртуальными
50. Делайте деструкторы базовых классов открытыми и виртуальными либо защищенными и невиртуальными РезюмеУдалять или не удалять — вот в чем вопрос! Если следует обеспечить возможность удаления посредством указателя на базовый класс, то деструктор базового класса
Глава 9 Среда разработки: библиотека базовых классов
Глава 9 Среда разработки: библиотека базовых классов Основным преимуществом объектно-ориентированных языков программирования, таких, как C++ и Smalltalk, является высокая степень повторного использования в хорошо спроектированных системах. Это означает, что для разработки
2.3. Снижение числа #include с помощью предварительного объявления классов
2.3. Снижение числа #include с помощью предварительного объявления классов ПроблемаИмеется заголовочный файл, который ссылается на классы из других заголовочных файлов, и требуется снизить зависимости компиляции (и, возможно, время).РешениеЧтобы избежать ненужных
Глава 6 Управление данными с помощью контейнеров
Глава 6 Управление данными с помощью контейнеров 6.0. Введение Эта глава описывает структуры данных стандартной библиотеки, используемые для хранения данных. Часто они также называются контейнерами (containers), так как они содержат («contain») хранящиеся в них объекты. Также эта
Глава 2 Управление базой данных с помощью SQL
Глава 2 Управление базой данных с помощью SQL Из этой главы вы узнаете, как работать с данными в СУБД MySQL, как определять их структуру, а также как добавлять, изменять и удалять данные. Эти операции выполняет SQL – универсальный язык структурированных запросов, являющийся
Роль библиотек базовых классов
Роль библиотек базовых классов В дополнение к спецификациям CLR и CTS/CLS, платформа .NET предлагает библиотеку базовых классов, доступную всем языкам программирования .NET. Эта библиотека базовых классов не только инкапсулирует различные примитивы, такие как потоки, файловый
Создание обобщенных базовых классов
Создание обобщенных базовых классов Перед рассмотрением обобщенных интерфейсов следует указать на то, что обобщенные классы могут быть базовыми для других классов и могут таким образом определять любое число виртуальных и абстрактных методов. Однако производные типы
Соответствие между типами библиотеки базовых классов .NET, C# и CIL
Соответствие между типами библиотеки базовых классов .NET, C# и CIL В табл. 15.4 показано соответствие между типами базовых классов .NET и ключевыми словами C#, а также между ключевыми словами C# и командами CIL. Там же представлены сокращенные обозначения констант, используемые для
1.9. Представление видов и управление ими с помощью UIViewController
1.9. Представление видов и управление ими с помощью UIViewController Постановка задачи Необходимо иметь возможность переключаться между видами в вашем