Главная страница
    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.01 c
4-37434
SYNthetic
2002-11-21 17:45
2003.01.13
Обновление устройств Plug&Paly


1-37049
Алексей П
2002-12-29 20:41
2003.01.13
Excel, Clipboard


14-37294
Дмитрий К.К.
2002-12-23 06:14
2003.01.13
Именинники 23 декабря


3-36931
Карелин Артем
2002-12-17 14:36
2003.01.13
Ошибка 179


6-37238
Mr. Moon
2002-11-12 14:57
2003.01.13
Сообщение по новелу





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский