Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

Метод класса в производном классе   Найти похожие ветки 

 
mfender ©   (2006-09-22 14:23) [0]

Здравия желаю!

У класса-предка есть метод. Он пустой. Пытался его объявить abstract, но компилятор заругался, сообщив, что он должен быть dynamic или virtual.

Так вот, в классе предке этот метод вызывается. Как добиться, чтобы он выполнялся объектом производного класса?

Короткая иллюстрация ко всему этому безобразию:


type
 TmfXMLTreeView = class(TCustomTreeView)
 FXMLTree: TXMLDocument;
 private
   procedure SetXMLTree(const Value: TXMLDocument);
   procedure FillTree(var XML: TXMLDocument); dynamic;
 end;

implementation

procedure TmfXMLTreeView.SetXMLTree(const Value: TXMLDocument);
begin
 FXMLTree := Value;
 FillTree(FXMLTree);
end;

procedure TmfXMLTreeView.FillTree(var XML: TXMLDocument);
begin

end;

----------------------------------------

type
 TmfCatalogXMLTreeView = class(TmfXMLTreeView)
 private
   procedure FillTree(var XML: TXMLDocument);
 published

 end;

implementation

procedure TmfCatalogXMLTreeView.FillTree(var XML: TXMLDocument);
begin
 showmessage("FILLED!");
end;


 
Reindeer Moss Eater ©   (2006-09-22 14:30) [1]

Сделать интерфейс с таким методом.


 
Игорь Шевченко ©   (2006-09-22 14:33) [2]


> У класса-предка есть метод. Он пустой. Пытался его объявить
> abstract, но компилятор заругался, сообщив, что он должен
> быть dynamic или virtual.


Убрать тело метода и объявить его как virtual; abstract;

в производном объявить его как override;


 
Сергей М. ©   (2006-09-22 14:36) [3]


> Пытался его объявить abstract, но компилятор заругался,
> сообщив, что он должен быть dynamic или virtu


Ну так и выполни требования компилятора !
В чем проблема-то ?)

type
TmfXMLTreeView = class(TCustomTreeView)
..
  procedure FillTree(var XML: TXMLDocument); dynamic; abstract;
..
end;

..
TmfCatalogXMLTreeView = class(TmfXMLTreeView)
..
  procedure FillTree(var XML: TXMLDocument); override;
..
end;

..
procedure TmfCatalogXMLTreeView.FillTree(var XML: TXMLDocument);
begin
..
end;

Ы ?


 
Ega23 ©   (2006-09-22 14:36) [4]


> Убрать тело метода и объявить его как virtual; abstract;
>
>
> в производном объявить его как override;
>


и перенести его в секцию protected


 
Reindeer Moss Eater ©   (2006-09-22 14:37) [5]

Так он хочет вызывать метод не просто в предках, а в произвольном классе


 
mfender ©   (2006-09-22 14:39) [6]

Спасибо большое, ребята!
Действительно всё просто!

ЗЫ. А насчёт интерфейса - тоже подумаю... Надо и это постичь...


 
mfender ©   (2006-09-22 14:45) [7]


> Reindeer Moss Eater ©   (22.09.06 14:37) [5]
> Так он хочет вызывать метод не просто в предках, а в произвольном
> классе

Нет, так всё получилось:

 protected
   procedure FillTree(var XML: TXMLDocument); virtual; abstract;


 
Сергей М. ©   (2006-09-22 14:49) [8]


> mfender ©   (22.09.06 14:45) [7]


Надеюсь, при этом разницу между виртуальными и динамическими методами ты осознаешь


 
mfender ©   (2006-09-22 15:06) [9]


> Надеюсь, при этом разницу между виртуальными и динамическими
> методами ты осознаешь

Очень смутно. Как я понимаю, вся их разница где-то на уровне исполняемого кода...


 
Reindeer Moss Eater ©   (2006-09-22 15:15) [10]

Кстати.
Поосторожнее с параметром - TXMLDocument.
Он ведет себя по разному в зависимости от того, как создавался.
Иногда - это просто объект, иногда - чисто интерфейсный объект.


 
Сергей М. ©   (2006-09-22 15:17) [11]


> mfender ©   (22.09.06 15:06) [9]
>
>


Может таки хотя бы станд.справку почитать ?
Там ведь четко обозначена разница между virtual и dinamic ..


 
mfender ©   (2006-09-22 16:33) [12]


> Может таки хотя бы станд.справку почитать ?
> Там ведь четко обозначена разница между virtual и dinamic
> ..

Да читаю. Всё-равно не шибко понял. Очень мудрёно написано. Не дорос ещё...


 
Сергей М. ©   (2006-09-22 16:36) [13]


> Очень мудрёно написано.


Чтой-то вдруг ?)

Цитируй справку, ссылайся на непонятное в ней, спрашивай ..

На то и форум ..



Страницы: 1 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.063 c
1-1156235593
Паблос
2006-08-22 12:33
2006.10.08
Неправильная рамка окна TCustomDockForm


15-1158561071
Колдун
2006-09-18 10:31
2006.10.08
Фэнтези


15-1158584053
Layner
2006-09-18 16:54
2006.10.08
В каком формате справку к программе писать?


15-1158529418
Andy BitOff
2006-09-18 01:43
2006.10.08
Недавно (месяц-другой назад) была ветка ...


2-1158574514
MikhailV
2006-09-18 14:15
2006.10.08
Оцените код $-))





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский