Вниз
Скачать: 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
15-1166870445
lookin
2006-12-23 13:40
2007.01.14
Посмотрел Список Шиндлера....


2-1166966082
yeorsh
2006-12-24 16:14
2007.01.14
Вопрос изменения DBGrid.Font.Color.


1-1163990576
kernel
2006-11-20 05:42
2007.01.14
ShellListView&Multiselect


15-1167028079
IMHO
2006-12-25 09:27
2007.01.14
WinDJView


15-1166984514
wl
2006-12-24 21:21
2007.01.14
шапка деда мороза




   Наверх