Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
PAGE \* MERGEFORMAT4
Лекция 4. Наследование классов.
Наследование, наряду с инкапсуляцией и полиморфизмом, является одним из трех принципов, определяющих концепцию объектно-ориентированного программирования.
Наследование означает что один класс (производный ) может принимать свойства другого (базового = родительского). Свойство наследования транзитивно (если класс В является наследником класса А, а класс С является наследником класса В, то таким образом класс С наследует (транзитивно) свойства класса А).
Наследование позволяет многократно использовать одинаковые программные элементы без необходимости их повторного создания. Например, визуальные элементы наследуют класс Point, позволяющий задавать координаты точки на экране, соответственно разные элементы управления могут использовать этот класс для задания своего месторасположения.
При описании производного класса указывается базовый класс (ТОЛЬКО ОДИН):
class имя : имя_базового_класса
{ ... }
При создании объекта производного класса, его конструктор автоматически вызывает конструктор базового класса.
Конструктор производного класса может явно вызвать конструктор базового класса с помощью ключевого слова base (), в скобках указываются передаваемые аргументы.
Производный класс имеет доступ ко всем НЕ ЗАКРЫТЫМ полям базового класса. В производном классе возможен доступ к закрытым переменным базового класса с помощью открытых Properties. Так же в производном классе доступны поля с атрибутом доступа protected. Базовый класс НЕ ИМЕЕТ доступ к членам производного класса.
В производном классе можно определить член класса, имеющий такое имя, которое уже существует в базовом классе (оно скрывается), для этого перед его описанием указывается new. Для доступа к скрытому члену класса используется ключевое слово base. Например base.имя_базового_класса.
Если существует переменная, ссылающаяся на объект базового класса, ей можно присвоить ссылку на объект производного класса, НО такой переменной будут доступны только поля базового класса, хотя она ссылается на объект производного класса!
В базовом классе могут быть объявлены методы с модификатор virtual. Такие методы могут переопределяться в производных классах указывается модификатор override. Важно, что при вызове переопределенного метода правильный тип вызываемого метода определяется ТИПОМ ОБЪЕКТА (во время выполнения программы), а не типом ссылки как при вызове переменных. Переопределяемый метод не может быть статическим, он должен полностью совпадать по сигнатуре с методом базового класса.
Таким же образом переопределяются и свойства.
Ещё одним типом методов, требующих определения в производных классах являются абстрактные методы (модификатор abstract, модификатор virtual НЕ указывается, в производных классах модификатор override указывается). Такие методы не имеют тела. Класс с абстрактными методами (свойства) обязательно объявляется как абстрактный, он не может иметь объекты. Производный(е) класс должен реализовать ВСЕ абстрактные методы если требуется создавать экземпляры такого класса.
В C# можно запретить создание производных классов, для этого при объявлении класса указывается модификатор sealed. Этот модификатор можно применять к методам для запрета их дальнейшего переопределения.
В C# все классы являются производными от класса object. Это означает, что переменная ссылочного типа может ссылаться на объект любого другого класса. Некоторыми часто используемыми методами этого класса являются: ToString(), Equals(), GetType().
Для проверки типа объекта можно использовать оператор is
переменная is тип
который возвращает true при совпадении типа проверяемой переменной с заданным в сравнении типом.
Пример int i; if (i is int) MsgBox.Show(“Tip sovpal”).
Оператор TypeOf(тип) позволяет получить информацию о конкретном типе, например свойство FullName возвращает полное имя типа.
Пример наследования
Необходимо создать класс, моделирующий предмет бытовой техники.
Класс должен содержать следующую информацию:
1) название предмета (любое)
2) название фирмы (любое)
3) цена (не допускается <0, может быть незаполненной)
4) масса предмета (не допускается <0, может быть незаполненная)
5) мощность (кВт/час, не допускается <0, может быть незаполненная)
6) тип предмета (в зависимости от массы: <5 кг малый; , 5-20кг средний; более 20 кг крупный, другие значения не допускаются)
7) энергопотребление (рассчитывается от введенного времени работы*мощность)
На его основании создается класс, моделирующий мультимедийную технику (с экраном и переопределением метода).