Практическое занятие № 8
Проектирование иерархии классов
Цель и содержание
Цель лабораторной работы: изучить механизм организации наследования классов.
Задачи лабораторной работы:
Научиться объявлять производные классы;
Научиться создавать иерархии классов;
Научиться использовать механизм полиморфизма.
Теоретическая часть
Наследование реализации
Наследование реализации (implementation inheritance) означает, что тип происходит от базового типа, получая от него все поля-члены и функции-члены.
Синтаксис наследования реализации:
Если при определении класса не указан базовый класс, то C# предполагает, что базовым классом является System.Object.
Создание ирархии классов
При наследовании реализации производный класс наследует реализацию каждой функции базового типа, если только в его определении не указано, что реализация функции должна быть переопределена.
Определим следующую иерархию классов (рис.6.1) и продемонстрируем, как наследуется реализация и как переопределяются свойств и методов.
Рисунок 6.1–Иерархия классов.
Создадим код, описывающий данную иерархию. Определим базовый класс:
Обратите внимание на наличие двух конструкторов, механизм хранения возраста человека и ключевое слово virtual у свойства «ФИО». Ключевое слово virtual указывает, что данное свойство будет переопределено в производном классе.
Определим производный класс «Учитель»:
Следует обратить внимание на использование ключевого слова override у свойства «ФИО», которое указывает на то, что данное свойство имеет новую реализацию, отличающуюся от реализации базового класса.
Определим второй производный класс «Студент»:
В обоих производных классах следует обратить внимание на реализацию конструкторов производных классов, использование ключевого слова base в коде свойства «ФИО» и при объявлении конструкторов.
Также интерес представляют типы данных, используемые для членов- данных: «Специальности», «Ученые Звания», «Ученые Степени». Вот определения данных типов-перечислений:
Наконец, продемонстрируем использование объявленной иерархии классов. В программе объявим массив объектов типа «Человек». Следует понимать,
что при объявлении такого массива, его элементам можно присваивать объекты любого производного класса, причем каждый объект будет вести себя по-своему (за счет переопределения свойств и методов).
В результате работы программы будет осуществлен следующий вывод:
Структуры всегда наследуются от System.ValueType. Они могут также наследовать любое количество интерфейсов. Классы всегда наследуются от одного класса по вашему выбору. Они также могут наследовать любое количество интерфейсов.
Методика и порядок выполнения работы:
Создайте консольное приложение.
Изучите пример создания иерархии классов, представленный в разделе
«Теоретическое обоснование» данной практической работы.
Ответить на контрольные вопросы:
Что такое наследование реализации? Как описать синтаксически наследование реализации?
Для чего используется ключевое слово base?
Можно ли переопределить метод класса? Свойства класса? Данные класса?
Как переопределить метод в производном классе?
Для чего используется ключевое слово virtual?
Для чего используется ключевое словоo verride?
Как поменять цвет фона в консольном приложении?
Как построить диаграмму типов данных, используемых в приложении средствами Visual Studio?
Сколько базовых классов может быть у любого класса в C#?