|  | 
|      | 
|   | 
| Перекрытие виртуальных методовDelphi , Компоненты и Классы , Процедуры и функцииПерекрытие виртуальных методовКто-нибудь знает, в чем разница между перекрытием (OVERRIDING) виртуального метода и заменой (REPLACING) его? Я немного запутался. Допустим у вас есть класс: 
 и его наследник: 
 К примеру, TMyObject имеет метод Wiggle: 
 а TOverrideObject перекрывает Wiggle: 
 и, естественно, вы реализовали оба метода. Теперь вы создаете TList, содержащий целую кучу MyObjects и OverrideObjects в свойстве TList.Items[n]. Свойство Items является указателем, поэтому для вызова метода Wiggle вам достаточно вызвать необходимый элемент списка. Например так: 
 
 но возможности полиморфизма и директива override позволяют вам сделать так: 
 Ваше приложение посмотрит на экземпляр специфического объекта, ссылка на который содержится в Items[1] и скажет: "Да, это - TMyObject, но, точнее говоря, это TOverrideObject; но поскольку метод Wiggle является виртуальным методом и TOverrideObject переопределил метод Wiggle, я собираюсь выполнить метод TOverrideObject.Wiggle, а не метод TMyObject.Wiggle." Теперь представьте себе, что при декларации метода вы пропустили директиву override, попробуйте это выполнить теперь: 
 Приложение и в этом случае должно "видеть" данный метод, даже если Items[1] - TOverrideObject; но у него отсутствует перекрытая версия метода Wiggle, поэтому приложение выполнит TMyObject.Wiggle, а не TOverrideObject.Wiggle (поведение, которое вы можете как хотеть, так и избегать). Так, перекрытый метод функционально может отличаться от декларированного метода, содержащего директиву virtual (или dynamic) в базовом классе, и объявленный с директивой override в классе-наследнике. Для замены метода необходимо объявить его в классе-наследнике без директивы override. Перекрытые методы могут выполняться даже тогда, когда специфический экземпляр класса-предка является точной копией базового класса. "Замененные" методы могут выполняться только тогда, когда специфический экземпляр является "слепком" только этого класса. Перекрытие виртуальных методов и замена ими - это два различных механизма, позволяющие изменять поведение наследуемых классов. Перекрытие метода с помощью директивы override позволяет выполнить уникальный код в дочернем классе, а заменой Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш  :: Главная :: Процедуры и функции :: 
 | |||||||||||
|  ©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | |||||||||||