Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.28;
Скачать: CL | DM;

Вниз

Pomogite,pls!Kak mojno vipolnit virtual metod dalnego roditelia?   Найти похожие ветки 

 
NikolaB   (2002-11-15 19:38) [0]

U MENIA STO-TO TOKOE:
tItem1 = class()
function AsString: string; virtual;
end.
tItem2 = class(tItem1)
function AsString: string; override;
end.
tItem3 = class(tItem2)
function AsString: string; override;
end.
tItem4 = class(tItem3)
function AsString: string; override;
end.

HOCHU STO tItem4.AsString BIT EDNOKOV S tItem1.AsString, NAPRIMER:

function tItem4.AsString: string;
begin
Result:=tItem1(Self).AsString
end;

KONECHNO - NE POLUCHAETSA, NO NAVERNO EST DRUGOI SINTAKSIS, KOTOROI RABOTAET?


 
reonid ©   (2002-11-15 20:43) [1]

Вообще-то такие проблемы обычно возникают при
неправильном проектировании иерархий.

Один из способов решения такой:

tItem1 = class()
function StaticStrFunc: string;
// сам подбери подходящее имя:
// если тебе нужно вызывать эту ф-ю в
// дальних потомках - вероятно, она имеет какой-то
// более конкретный смысл, чем просто AsString
function AsString: string; virtual;
//begin
// Result := StaticStrFunc;
//end;
end.
...
function tItem4.AsString: string;
begin
Result := StaticStrFunc;
end;

Это будет, вероятно, самый правильный путь.

Следует заметить, существует и хакерский способ,
через взятие статического адреса метода:

function tItem4.AsString: string;
type
TAsStringFunc = function: string of object;
var
AsStrFunc: TAsStringFunc;
begin
TMethod(AsStrFunc).Data := Self;
TMethod(AsStrFunc).Code := @TItem1.AsString;
Result := AsStrFunc();
end;


 
NikolaB   (2002-11-16 11:46) [2]

Spasibo za otveta. Viberu pervii variant, no ochen blagodaren, sto pokazali mne vtorogo varianta. Konechno soglasen i s Vashih ocenok kotoroe "obichno voznikaiut" :)



Страницы: 1 вся ветка

Текущий архив: 2002.11.28;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.012 c
3-92827
STANT
2002-11-08 11:39
2002.11.28
Раскажите кто-нибудь, как пользоватся QReport


3-92863
nv-vetal
2002-11-02 19:00
2002.11.28
Как протащить картинку из поля объекта OLE таблицы Аccess .....


1-93125
ed_209
2002-11-18 09:08
2002.11.28
доступ к ScrollBar в ListView


4-93298
Zone_666
2002-10-18 00:53
2002.11.28
Как заблокировать доступ к папке (к каталогу)


14-93244
Fantasist
2002-11-10 23:55
2002.11.28
Админам!