Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.08;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.063 c
3-1155033655
DelphiLexx
2006-08-08 14:40
2006.10.08
Как в DBGrid e подсвечивать конец линии сетки определенной записи


1-1156305794
Kos[UFO]
2006-08-23 08:03
2006.10.08
Инспекторе объектов BDS


2-1157710078
id
2006-09-08 14:07
2006.10.08
Работа с BLOB полями


2-1158848876
J_SABER
2006-09-21 18:27
2006.10.08
перевод курсора


15-1158179578
Ketmar
2006-09-14 00:32
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский