Главная страница
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.027 c
2-1179752865
Loonar
2007-05-21 17:07
2007.06.10
Вопрос


2-1179458410
delphino
2007-05-18 07:20
2007.06.10
Как подставить в ComboBox значения из таблицы БД?


15-1179231364
leonidus
2007-05-15 16:16
2007.06.10
Ищу толковую статью по проектированию БД


15-1179167527
@!!ex
2007-05-14 22:32
2007.06.10
1С под Linux


2-1179471546
Клара
2007-05-18 10:59
2007.06.10
Фильтрация