Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.01.13;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.009 c
14-37320
Shadow
2002-12-23 13:31
2003.01.13
Интересно, а кто нибкдь помнит что из себя


1-37023
Roman Mironov
2002-12-25 14:56
2003.01.13
Форма поверх всех окон


14-37347
herosofnn
2002-12-24 14:32
2003.01.13
IP


6-37233
Filin2000
2002-11-12 15:47
2003.01.13
TServerSocket в режиме stThreadBlocking


3-36970
Vladimir
2002-12-16 08:04
2003.01.13
Как поместить DataModule в DLL? И потом с ним работать?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский