
- •С# и объектно-ориентированное программирование. Содержание
- •Разбор простой программы на с#.
- •Варианты метода Main ()
- •Формальное определение класса в с#
- •2.1Ссылки на самого себя
- •Построение цепочки вызовов конструкторов с использованием this.
- •Модификаторы доступа с#
- •Средства инкапсуляции с#
- •Инкапсуляция с использованием традиционных методов доступа и изменения
- •Инкапсуляция с использованием свойств .Net
- •Свойства, доступные только для чтения и только для записи
- •Статические свойства
- •Статические конструкторы
- •Наследование в с#
- •Работа с конструктором базового класса
- •Множественное наследование.
- •Ключевое слово sealed
- •Поддержка полиморфизма в с#
- •Ключевые слова virtual и override
- •Абстрактные классы
- •Полиморфный интерфейс
- •Сокрытие методов
- •Правила приведения к базовому и производному классу
- •Ключевое слово as
- •Ключевое слово is
- •Применение модели включения – делегирования.
- •Определение вложенных типов
- •Обработка исключений
- •Роль обработки исключений в .Net
- •Составляющие процесса обработки исключений в .Net
- •Генерация общего исключения
- •Перехват исключений
- •Создание специальных исключений, способ первый
- •Обработка нескольких исключений.
- •Блок finally
- •Замечания по работе с исключениями
- •Время жизни объектов
- •Базовые сведения о времени жизни объектов
- •Роль корневых элементов приложения
- •Поколения объектов
- •Параллельная сборка мусора в версиях .Net 1.0 - .Net 3.5
- •Фоновая сборка мусора в версии .Net 4.0
- •Создание финализируемых объектов
- •Описание процесса финализации
- •Создание высвобождаемых объектов
- •Повторное использование ключевого слова using в с#
- •Взаимодействие со сборщиком мусора
- •Принудительная активизация сборки мусора
- •Создание финализируемых и высвобождаемых типов
- •Формализованный шаблон очистки
Свойства, доступные только для чтения и только для записи
При инкапсуляции данных может понадобиться сконфигурировать свойство, доступное только для чтения. Для этого нужно просто опустить блок set. Аналогично, если требуется создать свойство, доступное только для записи, следует опустить блок get. Например (хоть это и не требуется в рассматриваемом примере), вот как сделать свойство ssn (SocialSecurityNumber) доступным только для чтения:
(этот код вставляем в проект EmployeeExample, класс Employee)
Задание!!!: протестировать, исправить возможные ошибки
После этого единственным способом модификации номера карточки социального страхования будет передача его в аргументе конструктора. Теперь попытка установить новое значение свойства SSN для сотрудника внутри ведущего конструктора приведет к ошибке компиляции.
Статические свойства
В С# также поддерживаются статические свойства. Статические члены доступны на уровне класса, а не на уровне экземпляра (объекта) этого класса. Например, предположим, что в классе Employee определен статический элемент данных для представления названия организации, нанимающей сотрудников. Инкапсулировать статическое свойство можно следующим образом:
(этот код вставляем в проект EmployeeExample, класс Employee)
Задание!!!: протестировать, исправить возможные ошибки
Манипулировать статическими свойствами можно точно так же, как статическими методами.
(этот код вставляем в проект EmployeeExample, метод Main)
Задание!!!: протестировать, исправить возможные ошибки
Статические конструкторы
Классы могут поддерживать статические конструкторы. Поэтому если нужно гарантировать, что имя в статическом поле companyName всегда будет установлено в MyCompany, понадобится написать следующий код:
(этот код вставляем в проект EmployeeExample, класс Employee)
Задание!!!: протестировать, исправить возможные ошибки
Используя такой подход, нет необходимости явно вызывать свойство Company для того, чтобы установить начальное значение:
(этот код вставляем в проект EmployeeExample, метод Main)
Задание!!!: протестировать, исправить возможные ошибки
В завершение исследований инкапсуляции с использованием свойств С# следует запомнить, что эти синтаксические сущности служат для тех же целей, что и традиционные методы get/set. Преимущество свойств состоит в том, что пользователи объектов могут манипулировать внутренними данными, применяя единый именованный элемент.
Наследование в с#
Наследование — это аспект ООП, облегчающий повторное использование кода. Строго говоря, повторное использование кода существует в двух видах: наследование (отношение "является") и модель включения/делегации (отношение "имеет").
При установке между классами отношения "является" строится зависимость между двумя или более типами классов. Базовая идея, лежащая в основе классического наследования, заключается в том, что новые классы могут создаваться с использованием существующих классов в качестве отправной точки.
Рассмотрим это на примере. Предположим, что в дополнение к нашему классу Employee мы определили еще два производных класса: класс SalesPerson (продавец) и класс Manager (менеджер). В результате получится иерархия классов:
(этот код вставляем в проект EmployeeExample, пространство имен Employees)
Задание!!!: протестировать, исправить возможные ошибки
В данном примере оба производных класса расширяют функциональность базового класса, за счет добавления свойств уникальных для каждого класса. Производные классы автоматически унаследовали открытые члены базового класса Employee. Проверим это:
(этот код вставляем в проект EmployeeExample, метод Main)
Задание!!!: протестировать, исправить возможные ошибки