Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С# и объектно-ориентированное программирование.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
1.3 Mб
Скачать
    1. Свойства, доступные только для чтения и только для записи

При инкапсуляции данных может понадобиться сконфигурировать свойство, доступное только для чтения. Для этого нужно просто опустить блок set. Аналогично, если требуется создать свойство, доступное только для записи, следует опустить блок get. Например (хоть это и не требуется в рассматриваемом примере), вот как сделать свойство ssn (SocialSecurityNumber) доступным только для чтения:

(этот код вставляем в проект EmployeeExample, класс Employee)

Задание!!!: протестировать, исправить возможные ошибки

После этого единственным способом модификации номера карточки социального страхования будет передача его в аргументе конструктора. Теперь попытка установить новое значение свойства SSN для сотрудника внутри ведущего конструктора приведет к ошибке компиляции.

    1. Статические свойства

В С# также поддерживаются статические свойства. Статические члены доступны на уровне класса, а не на уровне экземпляра (объекта) этого класса. Например, предположим, что в классе Employee определен статический элемент данных для представления названия организации, нанимающей сотрудников. Инкапсулировать статическое свойство можно следующим образом:

(этот код вставляем в проект EmployeeExample, класс Employee)

Задание!!!: протестировать, исправить возможные ошибки

Манипулировать статическими свойствами можно точно так же, как статическими методами.

(этот код вставляем в проект EmployeeExample, метод Main)

Задание!!!: протестировать, исправить возможные ошибки

    1. Статические конструкторы

Классы могут поддерживать статические конструкторы. Поэтому если нужно гарантировать, что имя в статическом поле companyName всегда будет установлено в MyCompany, понадобится написать следующий код:

(этот код вставляем в проект EmployeeExample, класс Employee)

Задание!!!: протестировать, исправить возможные ошибки

Используя такой подход, нет необходимости явно вызывать свойство Company для того, чтобы установить начальное значение:

(этот код вставляем в проект EmployeeExample, метод Main)

Задание!!!: протестировать, исправить возможные ошибки

В завершение исследований инкапсуляции с использованием свойств С# следует запомнить, что эти синтаксические сущности служат для тех же целей, что и традиционные методы get/set. Преимущество свойств состоит в том, что пользователи объектов могут манипулировать внутренними данными, применяя единый именованный элемент.

  1. Наследование в с#

Наследование — это аспект ООП, облегчающий повторное использование кода. Строго говоря, повторное использование кода существует в двух видах: наследование (отношение "является") и модель включения/делегации (отношение "имеет").

При установке между классами отношения "является" строится зависимость между двумя или более типами классов. Базовая идея, лежащая в основе классического наследования, заключается в том, что новые классы могут создаваться с использованием существующих классов в качестве отправной точки.

Рассмотрим это на примере. Предположим, что в дополнение к нашему классу Employee мы определили еще два производных класса: класс SalesPerson (продавец) и класс Manager (менеджер). В результате получится иерархия классов:

(этот код вставляем в проект EmployeeExample, пространство имен Employees)

Задание!!!: протестировать, исправить возможные ошибки

В данном примере оба производных класса расширяют функциональность базового класса, за счет добавления свойств уникальных для каждого класса. Производные классы автоматически унаследовали открытые члены базового класса Employee. Проверим это:

(этот код вставляем в проект EmployeeExample, метод Main)

Задание!!!: протестировать, исправить возможные ошибки