Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.48 MB
Время: 0.018 c
6-1164175406
psa247
2006-11-22 09:03
2007.06.10
IpConfig /release


2-1179798888
delphino
2007-05-22 05:54
2007.06.10
Копирование набора Query в Table


2-1179526975
Heart_Beat
2007-05-19 02:22
2007.06.10
HELP!


2-1179643152
А.Брей
2007-05-20 10:39
2007.06.10
Переменная


2-1179839213
_vl_
2007-05-22 17:06
2007.06.10
Перевод из строки в число