Как вызвать метод предкаDelphi , Компоненты и Классы , Процедуры и Функции
Автор: Fantasist
1) Есть Class1, с методом Mtd. Можно ли из программы вызвать Mtd от Class1, Другими словами, можно ли вызвать перезаписанный метод класса-предка? Способ 1(только для не виртуальных методов) var a: class2; begin a := class2.Create; class1(a).mtd; .... end; Дополнение: Le Taon Способ со статическим приведением годится только для невиртуальных методов, имеющих одно имя. Вызов же виртуальных методов от статического типа не зависит. В твоём простейшем случае достаточно написать inherited Mtd; (ты его можешь вызвать из любого метода TClass2, не только из Mtd). Трудности возникнут, когда нужно вызвать метод "дедушки" или "прадедушки" и т.д. Один из способов, описанных в литературе, - временная замена VMT объекта на "дедушку" и обратно. Но если у дедушки такого метода не было - будет облом. Я предпочитаю такой способ: type TProc = procedure of object; procedure TClassN.SomeMethod; var Proc: TProc; begin TMethod(Proc).Code := @TClass1.Mtd; // Статический адрес TMethod(Proc).Data := Self; Proc(); end; Можно вызвать метод предка из программы, используя статическое приведение для не виртуальных методов или временную замену VMT объекта для виртуальных методов. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Процедуры и Функции ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |