Форум: "Начинающим";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];
ВнизМожет ли функция от интерфейса быть виртуальной? Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.014 c