Форум: "Начинающим";
Текущий архив: 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