Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
9-1141552306
NightLord
2006-03-05 12:51
2007.01.14
Свет в GLScene


1-1164358778
bva
2006-11-24 11:59
2007.01.14
Длинная строка в ComboBox


4-1157089018
vodvorezlaya
2006-09-01 09:36
2007.01.14
Как получить вписок окон в системе


2-1167126420
algol
2006-12-26 12:47
2007.01.14
банки SF2


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский