Форум: "Основная";
Текущий архив: 2003.05.01;
Скачать: [xml.tar.bz2];
ВнизДва вопроса по интерфейсам Найти похожие ветки
← →
Igorek (2003-04-18 21:06) [0]Доп. есть такой код:
TI = interface
[...GUID...]
procedure FI;
end;
TA = class(TI)
procedure FI; virtual;//реализацию опускаю
end;
TB = class(TA, TI)
procedure FI; override;
function GetMyI: TI;
property MyI: TI read GetMyI imlements TI;
end;
function TA.GetMyI: TI;
begin
if <SomeCondition> then
Result := <Some TI>
else
Result := inherited TI;
end;
Два вопроса:
1) в класе TB кто реализует метод FI? - метод этого класса или метод свойства, реализующего интерфейс?
2) (посложнее) как правильно написать строчку
Result := inherited TI;
т.е. обратиться к реализации интерфейса предка?
← →
Набережных С. (2003-04-19 07:35) [1]1) Оба. В какой попадешь смотри ниже.
2) Например, так:
function TB.GetMyI: TI;
begin
if <SomeCondition> then
Result := <Some TI>
else
Result := TA(Self);
end;
Но обратиться через интерфейс ты сможешь либо к методу FI класса TB, т.к. метод виртуальный, либо к <Some TI>.FI
← →
_VaaL_ (2003-04-19 10:26) [2]По первому вопросу:
Советую методы класса ТА тоже описать как интерфейс. Тогда проще будет разобратся с первым вопросом. Напимер
TI = interface
["{GUID}"]
procedure FI;
end;
TA = interface(TI)
["{GUID}"]
end;
TB = class(TComponent, TA, TI)
procedure FI;
Procedure FI2;
procedure TI.FI = FI;
procedure TA.FI = FI2;
end;
тогда ты имеешь чёткое представление, метод какого интерфейса ты вызываешь.
← →
Igorek (2003-04-19 19:23) [3]2Набережных С. (19.04.03 07:35)
Спасибо, TA(Self) - вроде то что нужно, осталось проверить.
2_VaaL_ (19.04.03 10:26)
К сожалению это редакторы свойств и предка я не выбираю. Да и методов там поболее, лень все писать. :-)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.05.01;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.007 c