![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Метод класса в производном классе [D7, XP]
mfender © (2006-09-22 14:23:00)Здравия желаю!
У класса-предка есть метод. Он пустой. Пытался его объявить 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;
Сергей М. (2006-09-22 16:36:00) [1]
> Очень мудрёно написано.
Чтой-то вдруг ?)
Цитируй справку, ссылайся на непонятное в ней, спрашивай ..
На то и форум ..
mfender (2006-09-22 16:33:00) [2]
> Может таки хотя бы станд.справку почитать ?
> Там ведь четко обозначена разница между virtual и dinamic
> ..
Да читаю. Всё-равно не шибко понял. Очень мудрёно написано. Не дорос ещё...
Сергей М. (2006-09-22 15:17:00) [3]
> mfender © (22.09.06 15:06) [9]
>
>
Может таки хотя бы станд.справку почитать ?
Там ведь четко обозначена разница между virtual и dinamic ..
Reindeer Moss Eater (2006-09-22 15:15:00) [4]Кстати.
Поосторожнее с параметром - TXMLDocument.
Он ведет себя по разному в зависимости от того, как создавался.
Иногда - это просто объект, иногда - чисто интерфейсный объект.
mfender (2006-09-22 15:06:00) [5]
> Надеюсь, при этом разницу между виртуальными и динамическими
> методами ты осознаешь
Очень смутно. Как я понимаю, вся их разница где-то на уровне исполняемого кода...
Сергей М. (2006-09-22 14:49:00) [6]
> mfender © (22.09.06 14:45) [7]
Надеюсь, при этом разницу между виртуальными и динамическими методами ты осознаешь
mfender (2006-09-22 14:45:00) [7]
> Reindeer Moss Eater © (22.09.06 14:37) [5]
> Так он хочет вызывать метод не просто в предках, а в произвольном
> классе
Нет, так всё получилось:
protected
procedure FillTree(var XML: TXMLDocument); virtual; abstract;
mfender (2006-09-22 14:39:00) [8]Спасибо большое, ребята!
Действительно всё просто!
ЗЫ. А насчёт интерфейса - тоже подумаю... Надо и это постичь...
Reindeer Moss Eater (2006-09-22 14:37:00) [9]Так он хочет вызывать метод не просто в предках, а в произвольном классе
Сергей М. (2006-09-22 14:36:00) [10]
> Пытался его объявить 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:00) [11]
> Убрать тело метода и объявить его как virtual; abstract;
>
>
> в производном объявить его как override;
>
и перенести его в секцию protected
Игорь Шевченко (2006-09-22 14:33:00) [12]
> У класса-предка есть метод. Он пустой. Пытался его объявить
> abstract, но компилятор заругался, сообщив, что он должен
> быть dynamic или virtual.
Убрать тело метода и объявить его как virtual; abstract;
в производном объявить его как override;
Reindeer Moss Eater (2006-09-22 14:30:00) [13]Сделать интерфейс с таким методом.