Вниз
Скачать: 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
1-37181
race1
2002-12-30 12:00
2003.01.13
опять :)


4-37437
Cosmic
2002-11-24 21:58
2003.01.13
Как получить элемент ListBox a???


1-37190
Igor1
2002-12-27 10:45
2003.01.13
Winoldap


1-37090
tboxer
2003-01-03 16:22
2003.01.13
курсор и звук


14-37315
Оливейра
2002-12-23 21:27
2003.01.13
Про то, как Антона Палыча забодали спамеры.




   Наверх