![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вызов метода прапрародителя [D2005]
pvr © (2008-02-28 10:39:00)Как это сделать?
Сергей М. (2008-02-28 14:18:00) [1]Удалено модератором
pvr (2008-02-28 14:15:00) [2]Удалено модератором
DiamondShark (2008-02-28 14:12:00) [3]Удалено модератором
Примечание: внимательно изучаем п. 11
Сергей М. (2008-02-28 14:12:00) [4]Удалено модератором
pvr (2008-02-28 14:11:00) [5]Удалено модератором
Сергей М. (2008-02-28 14:10:00) [6]
> pvr (28.02.08 14:00) [46]
Вот я и хочу понять, чем оправдана попытка такого рода "вмешательства".
А из приведенного тобой кода совершенно неясно, где в теле TMyClass.InitData происходит попытка вызова какого-либо вирт.метода класса TGrand
pvr (2008-02-28 14:00:00) [7]Удалено модератором
Сергей М. (2008-02-28 13:54:00) [8]так покажи, где она у тебя есть .. пусть и с "ошибкой синтаксиса" ..
pvr (2008-02-28 13:50:00) [9]Здесь нет.
Сергей М. (2008-02-28 13:49:00) [10]
> procedure TMyClass.InitData; // override;
> begin
> BaseInitData;
> ...
> end;
>
Ну и где здесь попытка вызова виртуального метода деда ?
pvr (2008-02-28 13:43:00) [11]Неправильно понял слова "не разрешенная по спроектированной диаграмме классов". Согласен.
pvr (2008-02-28 13:40:00) [12]В чем ошибка проектирования?
procedure TGrand.BaseInitData;
begin
...
end;
procedure TGrand.InitData; // virtual;
begin
BaseInitData;
...
end;
procedure TFather.InitData; // override;
begin
inherited;
...
end;
procedure TMyClass.InitData; // override;
begin
BaseInitData;
...
end;
Palladin (2008-02-28 13:25:00) [13]
> pvr (28.02.08 12:53) [38]
возникшая необходимость обращения к методу, дедушки, но не разрешенная по спроектированной диаграмме класов - назвается ошибкой проектирования, кою необходимо исправить пока не поздно.
Сергей М. (2008-02-28 12:55:00) [14]
> кто-нибудь продолжит растолковывать тебе принципы ООП
Сгораю от нетерпения.
pvr (2008-02-28 12:53:00) [15]Может, кто-нибудь продолжит растолковывать тебе принципы ООП, а я уже устал. Прости.
Сергей М. (2008-02-28 12:53:00) [16]А если уж, по-твоему, и имеет, то в Делфи все это решаемо и без грязного хака.
Просто следует грамотно приспособить для этой цели механизм вызова одноименного метода прямого предка - inherited.
Сергей М. (2008-02-28 12:50:00) [17]
> pvr (28.02.08 12:47) [34]
А какое, спрашивается, право внук имеет вмешиваться в дела дедушки ?)
Сергей М. (2008-02-28 12:48:00) [18]
> проектирование стало плохим
"Вы не любите кошек ? Да вы просто не умеете их готовить !" (c)
pvr (2008-02-28 12:47:00) [19]Сергей М. © (28.02.08 12:34) [31]
Понял твое недопонимание.
procedure TInherited.Method;
begin
TGrandFather.Method;
...
end;
Экземпляр типа TInherited из своего метода вызывает метод дедушки. При этом используется контекст экземпляра.
Amoeba (2008-02-28 12:46:00) [20]
> Но в Delphi этой возможностью пожертвовали ради классовых
> методов, и проектирование стало плохим :-)
>
LOL!