Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.13;
Скачать: 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 вся ветка

Текущий архив: 2003.01.13;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
7-37419
stone
2002-10-31 15:44
2003.01.13
Корректное уничтожение клиента на сервере приложений


6-37255
Борис
2002-11-13 12:48
2003.01.13
Не могу получить список всех компьютеров сети!


4-37448
Lony
2002-11-24 20:38
2003.01.13
CreateThread


14-37327
Слава
2002-12-23 21:10
2003.01.13
Мастера! Помогите!


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