procedure ObjCommon; virtual;
end;
TObj2 = class(TObj1)
procedure ObjCommon; override;
end;
хочу имея объект TObj2 добраться до базового TObj1.ObjCommon
делаю так:
var obj := TObj2.Create;
(obj as TObj1).ObjCommon;
но нет, не выходит. Как вызвать только TObj1.ObjCommon ?
в контексте TObj2 можно написать inherited ObjCommon
у меня есть obj типа TObj2. и совершенно в другом месте, не внутри классов, хочется вызвать только базовый TObj1.ObjCommon. понятно что внутри классов я могу Inherited дернуть....
Вы можете такое сделать, только если у вас будут отличаться параметры. К примеру вот так TObj1 = class procedure ObjCommon; overload; virtual; end; TObj2 = class(TObj1) procedure ObjCommon(I: Integer); reintroduce; overload; virtual; end;
O2: TObj2; ObjCommon: procedure of object; begin O2 := TObj2.Create; TMethod(ObjCommon).Code := @TObj1.ObjCommon; TMethod(ObjCommon).Data := O2; ObjCommon;
вот, монстры подтянулись 😊 похоже именно этого ответа я и ожидал. ушел пробовать
Все сработало. пришлось объявить новый тип для procedure of object но это мелочи. главное не пришлось эти TObj1 TObj2 править... Всем спасибо за идеи!
Обсуждают сегодня