Вниз
Скачать: CL | DM;

Можно ли привести интерфейс к классу   Найти похожие ветки 

 
id_privin ©   (2003-01-04 14:22) [0]

Итак есть интерфейс

IFoo = interface
["{...}"]
procedure P;
end;

его реализация

TFoo = class(TComponent,IFoo)
procedure P;
property Bar : TObject;
end;

procedure TFoo.P
begin
if not Assigned(Bar) then <Exception>
end;

делаю так
var
Foo : IFoo;
begin
Foo := TFoo.Create(nil);
TFoo(Foo).Bar := TSomeObject.Create;
Foo.P; <= Exception Here
end;

То есть объект не присвоился. В чем дело?


 
icWasya ©   (2003-01-04 14:38) [1]


> Можно ли привести интерфейс к классу

Нет.
а поэтому


> TFoo(Foo).Bar := ....

работать не будет


 
id_privin ©   (2003-01-04 14:51) [2]

Весело! Значит унаследовать от интерфейса можно а привести обратно нельзя. ООП отдыхает. Ну буду извращаться тогда.


 
Дмитрий Баранов ©   (2003-01-04 15:30) [3]

Var ObjFoo: TFoo;
pFoo : IFoo;
...
ObjFoo:=TFoo.Create;
IFoo := ObjFoo as IFoo;
// неявно вызывается QueryInterface.
if (IFoo == nil) then raise...




 
AngeL B.   (2003-01-04 15:42) [4]


> Значит унаследовать от интерфейса

От интерфейса никто не наследует. Его реализуют. И как его реализуют и чем его реализуют неизвестно (инкапсуляция), так что привести непонятно к чему интерфейс нельзя.


 
id_privin ©   (2003-01-04 16:01) [5]


> Дмитрий Баранов © (04.01.03 15:30)


Если бы все было так просто Ж))

Но есть базовый абстрактный класс и он использует интерфейс. В потомке надо в одном месте (в конструкторе) задать реализацию для интерфейса. А в другом месте ( в функции специфичной для этого потомка присвоить реализации интерфейса это самое свойство )


> AngeL B. (04.01.03 15:42)


Угу, Угу. Один указатель к другому ну ни как. Пусть это не безопасно (да простят меня Отцы), но на мой взляд

TypeA(TypeB(ObjectOfTypeA)) должно срабатывать корректно, или я не понимаю что такое Type()



Страницы: 1 вся ветка

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



Память: 0.46 MB
Время: 0.012 c
14-37361
Max Zyuzin
2002-12-24 19:58
2003.01.13
Остерегайтесь!!!


14-37285
Top Gun
2002-12-25 01:08
2003.01.13
Можно ли запустить Drive Image и и Partiton magic с компакта ?


14-37340
cyborg
2002-12-22 19:42
2003.01.13
Начало, но уже другое :)


1-37119
Zelius
2002-12-24 20:24
2003.01.13
Проблемы с TdxTreeList (DevExpress)


1-37002
MadGhost
2002-12-31 16:34
2003.01.13
Как подключить компонент ActiveX ?




   Наверх