![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отличить переменную на TObject от перменной IInterface
Priest © (2006-08-16 10:47:00)Есть код
IMy = interface(IInterface)
['{5CA75D2E-30DC-4D3F-BDA5-F3790849A160}']
end;
TMyComponent = class(TComponent, IMy)
end
Создан метод
procedure MyProcedure(My:IMy);
begin
end;
Я хочу проверить в методе MyProcedure является ли My переменной типа TMyComponent. Можно ли сделать такое?
Priest (2006-08-16 11:22:00) [1]>>MBo
Это я сам запутался :(
MBo (2006-08-16 11:15:00) [2]>Получается что у O есть таблица с реализованными интерфейсами и я вижу какие реализованы........А у I такой таблицы нет....Вот тепреь нужно как то проверить :)
Ничего не понял...
Таблица интерфейсов есть у объекта. У интерфейса ее, естественно, нет. Чего проверять-то???
Priest (2006-08-16 11:12:00) [3]Да. Я не прав :(
Сергей М. (2006-08-16 11:11:00) [4]
> получается что я передал переченную типа TMyComponent
А фактически в MyProcedure() попадет не компонент, а интерфейс.
Интерфейс же "безлик".
Так что придется выкручиваться, например, как в [4].
Priest (2006-08-16 11:05:00) [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 такой таблицы нет....Вот тепреь нужно как то проверить :)
MBo (2006-08-16 10:57:00) [6]А, вот ты о чем...
>И получается что я передал переченную типа TMyComponent
нет, ты передал интерфейс, приведение типа выполнится автоматически
MBo (2006-08-16 10:56:00) [7]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;
Priest (2006-08-16 10:54:00) [8]Я могу написать так
var
MyC:TMyComponent;
begin
MyC:=TMyComponent.Create(nil);
MyProcedure(MyC);
И получается что я передал переченную типа TMyComponent. Как мне это отличить?
Сергей М. (2006-08-16 10:49:00) [9]
> является ли My переменной типа TMyComponent
И проверять тут нечего - My неявляется переменной типа TMyComponent.