Главная страница
    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.043 c
1-1156666261
AlexeyT
2006-08-27 12:11
2006.10.08
Что за контрол отвечает за MCIWndClass?


15-1158555115
syte_ser78
2006-09-18 08:51
2006.10.08
palm 3


2-1158833275
Evgenii
2006-09-21 14:07
2006.10.08
Как обнулить время компонента TMonthCalendar


3-1154801958
Klever
2006-08-05 22:19
2006.10.08
Хранение и отображение картики в базе Access


2-1158408359
greengeneral
2006-09-16 16:05
2006.10.08
Как сделать чтобы в Edit1 можно было вводить только цифры?





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