Главная страница
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.025 c
2-1179470344
FIL-23
2007-05-18 10:39
2007.06.10
функция или процедура проверяющая правельность введеной даты


1-1176448717
mid
2007-04-13 11:18
2007.06.10
Экспорт в Excel


15-1179251769
VirEx
2007-05-15 21:56
2007.06.10
I, robot.


2-1179396735
17Landgraf
2007-05-17 14:12
2007.06.10
Как изменить свойства файла


2-1179403145
Dush
2007-05-17 15:59
2007.06.10
помогите с запросом