Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.14;
Скачать: CL | DM;

Вниз

Может ли функция от интерфейса быть виртуальной?   Найти похожие ветки 

 
Ega23 ©   (2006-12-22 17:12) [0]

Есть interface
IMyInterface = interface
  function A : Boolean;
end;

Есть класс, реализующий этот интерфейс:
TMyClass=class(TObject, IMyInterface)
  protected
   function A : Boolean; virtual;
 end;

Можно ли так делать и будет ли она корректно перекрываться у потомков?


 
alex_*** ©   (2006-12-22 17:17) [1]

можно. Только у потомков тоже надо реализовывать этот интерфейс, если ты хочешь его использовать через интерфейс. Причем у потомков не обязательно будет реализовывать function A, если она не private в предке


 
Джо ©   (2006-12-22 17:20) [2]

 IMyInterface = interface
   procedure A;
 end;

 TMyClass1 = class(TInterfacedObject, IMyInterface)
 protected
   procedure A; virtual;
 end;

 TMyClass2 = class(TMyClass1, IMyInterface)
 protected
   procedure A; override;
 end;

---

procedure TMyClass1.A;
begin
 ShowMessage ("A")
end;

{ TMyClass2 }

procedure TMyClass2.A;
begin
 ShowMessage ("B")
end;

procedure TForm1.Button1Click(Sender: TObject);
var
 MyIntf: IMyInterface;
begin
 MyIntf := TMyClass2.Create;
 MyIntf.A
end;


:D


 
Ega23 ©   (2006-12-22 17:20) [3]


> Только у потомков тоже надо реализовывать этот интерфейс


Похоже, ты тут ошибся.


 
alex_*** ©   (2006-12-22 17:25) [4]


> > Только у потомков тоже надо реализовывать этот интерфейс
>
>
> Похоже, ты тут ошибся.
>

я хотел сказать что при описании декларации класса у потомков тоже надо писать  TChild=class(TParent, IMyInterface)


 
Джо ©   (2006-12-22 17:34) [5]

> Ega23 ©  

Если примера недостаточно, то добавлю, что интерфейс — это ссылка на «кусок» VMT существующего экземпляра, собственно.


 
Ega23 ©   (2006-12-22 17:42) [6]


> Если примера недостаточно, то добавлю, что интерфейс — это
> ссылка на «кусок» VMT существующего экземпляра, собственно.
>


Вопрос, собственно, был в том, что будет если из декларацию TMyClass2 = class(TMyClass1) оставить без IMyInterface?


 
alex_*** ©   (2006-12-22 17:48) [7]

будет что TMyClass2 не будет реализовывать IMyInterface


 
Ega23 ©   (2006-12-22 17:50) [8]


> будет что TMyClass2 не будет реализовывать IMyInterface


Да, но я же могу его реализовать как TMyClass1(TMyClass2) ....

Всё, всем спасибо, вопрос снят.



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

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

Наверх




Память: 0.48 MB
Время: 0.041 c
2-1166605815
>>DEATH<<
2006-12-20 12:10
2007.01.14
запись в массив


2-1166791290
Rolevik
2006-12-22 15:41
2007.01.14
Задание атрибутов музыкальных файлов


15-1166783106
Gero
2006-12-22 13:25
2007.01.14
Зацените дизайн


2-1167002446
Vladimir1984
2006-12-25 02:20
2007.01.14
Как сохранить в JPG


2-1167038783
D@Nger
2006-12-25 12:26
2007.01.14
Поиск в БД Парадокс