Наследование (синтаксис). Компьютерные технологии (программирование на C#)
Во втором способе (виртуальный метод) при преобразовании типов, описанном выше, вызываться будет метод класса-наследника. Это существенно, если виртуальный метод вызывается внутри кода, написанного для класса-предка. Так как реальная ссылка в момент выполнения кода будет указывать на экземпляр объекта класса-наследника, то выполняться будет именно версия класса-наследника. При описании… Читать ещё >
Наследование (синтаксис). Компьютерные технологии (программирование на C#) (реферат, курсовая, диплом, контрольная)
Наследование расширяет число типов, к которым относятся объекты класса-наследника — эти объекты имеют тип самого класса-наследника и всех его предков.
Когда один класс наследует другой, класс-наследник приобретает все поля и методы, которыми обладает его предок.
Класс-наследник может добавить свои поля и методы и может заменить унаследованные поля и изменить поведение унас…
Другой способ — описать метод, который может быть изменен у наследника, как виртуальный. Так что, в классе-предке это выглядит как.
public virtual void aMethod ();
а в классе-наследнике.
public override void aMethod ();
Поле не может быть виртуальным.
Во втором способе (виртуальный метод) при преобразовании типов, описанном выше, вызываться будет метод класса-наследника. Это существенно, если виртуальный метод вызывается внутри кода, написанного для класса-предка. Так как реальная ссылка в момент выполнения кода будет указывать на экземпляр объекта класса-наследника, то выполняться будет именно версия класса-наследника.
При описании виртуального метода в классе-наследнике (метод с модификатором override) часто бывает необходимо вызвать унаследованную версию виртуального метода. Для этого используется служебное слово base. Так реализация метода aMethod () класса-наследника может иметь вид.
public override void aMethod ();
{.
base.aMethod (); //Вызов метода класса-предка.
// …
}.
Если дальнейшее перекрытие виртуального метода aMethod () в последующих наследниках не желательно, то в его заголовок следует добавить модификатор sealed.
public sealed override void aMethod ();//Метод больше не будет перекрываться Если же, наоборот, метод, описанный как виртуальный, должен быть заменен новой версией виртуального же метода, описание должно иметь вид.
public new virtual void aMethod ();//Образуется новый виртуальный метод.