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

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

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

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 - 2018, Delphi.int.ru
Версия форума: 1.10 (19.01.2010)
RSS Delphi.int.ru Expert Код
Выполнено за 0.04 сек.
Обратная связь  
Рейтинг@Mail.ru Majordomo.ru - надёжный хостинг