![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Может ли функция от интерфейса быть виртуальной?
Ega23 © (2006-12-22 17:12:00)Есть interface
IMyInterface = interface
function A : Boolean;
end;
Есть класс, реализующий этот интерфейс:
TMyClass=class(TObject, IMyInterface)
protected
function A : Boolean; virtual;
end;
Можно ли так делать и будет ли она корректно перекрываться у потомков?
Ega23 (2006-12-22 17:50:00) [1]
> будет что TMyClass2 не будет реализовывать IMyInterface
Да, но я же могу его реализовать как TMyClass1(TMyClass2) ....
Всё, всем спасибо, вопрос снят.
alex_*** (2006-12-22 17:48:00) [2]будет что TMyClass2 не будет реализовывать IMyInterface
Ega23 (2006-12-22 17:42:00) [3]
> Если примера недостаточно, то добавлю, что интерфейс — это
> ссылка на «кусок» VMT существующего экземпляра, собственно.
>
Вопрос, собственно, был в том, что будет если из декларацию TMyClass2 = class(TMyClass1) оставить без IMyInterface?
Джо (2006-12-22 17:34:00) [4]> Ega23 ©
Если примера недостаточно, то добавлю, что интерфейс — это ссылка на «кусок» VMT существующего экземпляра, собственно.
alex_*** (2006-12-22 17:25:00) [5]
> > Только у потомков тоже надо реализовывать этот интерфейс
>
>
> Похоже, ты тут ошибся.
>
я хотел сказать что при описании декларации класса у потомков тоже надо писать TChild=class(TParent , IMyInterface)
Джо (2006-12-22 17:20:00) [6]
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:00) [7]
> Только у потомков тоже надо реализовывать этот интерфейс
Похоже, ты тут ошибся.
alex_*** (2006-12-22 17:17:00) [8]можно. Только у потомков тоже надо реализовывать этот интерфейс, если ты хочешь его использовать через интерфейс. Причем у потомков не обязательно будет реализовывать function A, если она не private в предке