Главная страница
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.033 c
15-1167024945
Slider007
2006-12-25 08:35
2007.01.14
С днем рождения ! 25 декабря


1-1163854909
PAVEL315
2006-11-18 16:01
2007.01.14
ПОМОГИТЕ!!!


1-1163803640
SkySpeed
2006-11-18 01:47
2007.01.14
Как определелить конец распечатки информации?


11-1143547021
В13
2006-03-28 15:57
2007.01.14
JpegObj - kol ?


2-1167047200
alex1111111111111111
2006-12-25 14:46
2007.01.14
как с помощью winapi закачать фаил с ftp