Текущий архив: 2007.06.10;
Скачать: CL | DM;
ВнизКак отличить переменную на TObject от перменной IInterface Найти похожие ветки
← →
Priest © (2006-08-16 10:47) [0]Есть код
IMy = interface(IInterface)
["{5CA75D2E-30DC-4D3F-BDA5-F3790849A160}"]
end;
TMyComponent = class(TComponent, IMy)
end
Создан метод
procedure MyProcedure(My:IMy);
begin
end;
Я хочу проверить в методе MyProcedure является ли My переменной типа TMyComponent. Можно ли сделать такое?
← →
Сергей М. © (2006-08-16 10:49) [1]
> является ли My переменной типа TMyComponent
И проверять тут нечего - My не является переменной типа TMyComponent.
← →
Priest © (2006-08-16 10:54) [2]Я могу написать так
var
MyC:TMyComponent;
begin
MyC:=TMyComponent.Create(nil);
MyProcedure(MyC);
И получается что я передал переченную типа TMyComponent. Как мне это отличить?
← →
MBo © (2006-08-16 10:56) [3]IMy = interface(IInterface)
["{5CA75D2E-30DC-4D3F-BDA5-F3790849A160}"]
function ObjRef: TObject;
end;
TMyComponent = class(TComponent, IMy)
function ObjRef: TObject;
end;
function TMyComponent.ObjRef: TObject;
begin
Result := Self;
end;
← →
MBo © (2006-08-16 10:57) [4]А, вот ты о чем...
>И получается что я передал переченную типа TMyComponent
нет, ты передал интерфейс, приведение типа выполнится автоматически
← →
Priest © (2006-08-16 11:05) [5]>>нет, ты передал интерфейс, приведение типа выполнится автоматически
Экспериментирую с кодом
O := TMyComponent.Create(nil);
I:=O;
PIT:=O.GetInterfaceTable;
for j:=0 to PIT.EntryCount-1 do
WriteLn(GUIDToString(PIT.Entries[j].IID));
Получается что у O есть таблица с реализованными интерфейсами и я вижу какие реализованы........А у I такой таблицы нет....Вот тепреь нужно как то проверить :)
← →
Сергей М. © (2006-08-16 11:11) [6]
> получается что я передал переченную типа TMyComponent
А фактически в MyProcedure() попадет не компонент, а интерфейс.
Интерфейс же "безлик".
Так что придется выкручиваться, например, как в [4].
← →
Priest © (2006-08-16 11:12) [7]Да. Я не прав :(
← →
MBo © (2006-08-16 11:15) [8]>Получается что у O есть таблица с реализованными интерфейсами и я вижу какие реализованы........А у I такой таблицы нет....Вот тепреь нужно как то проверить :)
Ничего не понял...
Таблица интерфейсов есть у объекта. У интерфейса ее, естественно, нет. Чего проверять-то???
← →
Priest © (2006-08-16 11:22) [9]>>MBo
Это я сам запутался :(
Страницы: 1 вся ветка
Текущий архив: 2007.06.10;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.044 c