Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.026 c
9-1141072759
Slava_K
2006-02-27 23:39
2007.01.14
Движение объектов


15-1166690617
Vovan #2
2006-12-21 11:43
2007.01.14
Дом-страница без глума про психопатство


15-1166559070
tesseract
2006-12-19 23:11
2007.01.14
давно не было моего ежемесячного дайджеста :-) :


2-1166637366
Slimer
2006-12-20 20:56
2007.01.14
Проблемма с индексами в таблице


15-1166687290
Pazitron_Brain
2006-12-21 10:48
2007.01.14
Дом-страница




   Наверх