Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.016 c
4-1167389492
Chaser
2006-12-29 13:51
2007.06.10
Проблема с событием MouseUp в ListView


4-1166970048
vertal
2006-12-24 17:20
2007.06.10
Точность измерения временных интервалов для UART в windows


1-1176453885
Reaktor
2007-04-13 12:44
2007.06.10
Есть ли альтернатива у Sleep и Exit?


3-1174484710
Dmitry_177
2007-03-21 16:45
2007.06.10
DbiQExecDirect из BDE API (IDAPI) не выполняет SQL-запрос


2-1179578772
AnSky
2007-05-19 16:46
2007.06.10
Сортировка в StringGrid




   Наверх