Логин:     Забыли пароль?
 
Пароль:   Регистрация

Форум / Программирование - Химеры программеров  

Химеры программеров

DNK
DNK
Студент
Сообщения: 241
[Сообщение #1] 4 августа 2011, 16:54
Задавшись вопросом вызова прародительского метода при наследовании, не нашел ни одного законного способа, кроме хака, ссылку на которого предоставил Вадим.

Тема создана для сбора и обсуждения таких не совсем правильных, но иногда нужных приёмов.

"Digital Networked Knight"
mirt.steelwater
mirt.steelwater
Посетитель
Сообщения: 17
[Сообщение #2] 14 августа 2011, 21:13
Ох. Я, пожалуй, даже вставлю сюда это.
Сурово, не додумался бы до такого. И это все тот же inherited. но как!
Интересно было бы получить TX(@TDaddy.X) (Self); но подозреваю, что так не выйдет.
type
  TGranny = class
  public
    procedure X; virtual;
  end;
 
  TDaddy = class (TGranny)
  public
    procedure X; override;
  end;
 
  TMe = class (TGranny)
  public
    procedure X; override;
  end;
 
procedure TForm14.Button1Click(Sender: TObject);
begin
  TMe.Create.X;
end;
 
{ TGranny }
 
procedure TGranny.X;
begin
  ShowMessage ('Granny');
end;
 
{ TDaddy }
 
procedure TDaddy.X;
begin
  ShowMessage ('Daddy');
end;
 
{ TMe }
 
type
  TX = procedure of object;
 
procedure TMe.X;
var
  GrannyX: TX;
  M: TMethod absolute GrannyX;
begin
  ShowMessage ('Me, Lovely');
  M.Code := @TGranny.X;
  M.Data := Self;
  GrannyX;
end;
 
// или
 
procedure TMe.X;
type
  TX = procedure(ASelf: TGranny);
begin
  ShowMessage ('Me, Lovely');
  TX(@TGranny.X) (Self);
end;

Ⓐ свобода сопротивление солидарность

Всего сообщений: 2 (сейчас показаны: с 1 по 2)

Перейти в раздел:


 © 2004 - 2017, Delphi.int.ru
Версия форума: 1.10 (19.01.2010)
RSS Delphi.int.ru Expert Код
Выполнено за 0.03 сек.
Обратная связь  
Рейтинг@Mail.ru Majordomo.ru - надёжный хостинг