![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
вопрос по inherited [D7, XP]
DFT © (2010-07-14 17:09:00)Здравствуйте, уважаемые мастера!
Вопрос простой, наверное, но, он сбил меня с толку.
В классе TList в модуле Classes объявлен метод
function Add(Item: Pointer): Integer;
begin
...
end;
В модуле Contnrs объявлен класс TObjectList (наследник TList) в котором объявлен аналогичный метод
function TObjectList.Add(AObject: TObject): Integer;
begin
Result := inherited Add(AObject);
end;
Не понимаю как в методе TObjectList.Add вызывается унаследованный метод Add класса TList, если он объявлен как статический.
Плохиш (2010-07-15 23:09:00) [1]
> han_malign (15.07.10 09:22) [7]
Описание языка не пробовал почитать?
Учсуд (2010-07-15 16:55:00) [2]патаму что виртуальный метод диспетчеризируетсо не по типу переменной, а по типу экземпляра.
han_malign (2010-07-15 09:22:00) [3]для статического метода это можно сделать и прямым приведением
Result := TList(Self).Add(AObject);
Контрольные вопросы:
1. почему так нельзя поступить с виртуальным методом?
2. для чего было введено ключевое слово inherited?
DFT (2010-07-14 20:26:00) [4]Всем спасибо за помощь и комментарии :)
Anatoly Podgoretsky (2010-07-14 20:07:00) [5]> DFT (14.07.2010 18:05:03) [3]
Очень глубоко.
Leonid Troyanovsky (2010-07-14 18:12:00) [6]
> DFT (14.07.10 17:09)
> Не понимаю как в методе TObjectList.Add вызывается унаследованный
> метод Add класса TList, если он объявлен как статический.
Запретов на подобный вызов статических методов предка нет:
it represents a normal method call or reference to a property or field—except
that the search for the referenced member begins with the immediate ancestor
of the enclosing method’s class.
Т.е., это указание компилятору поискать оный метод у непосредственного
предка.
Часто такой вызов используют в конструкторах потомков TThread,
для отработки (статического) конструктора TThread.
--
Regards, LVT.
DFT (2010-07-14 18:05:00) [7]Спасибо, Учсуд! А я всегда полагал, что inherited вызывается только для виртуальных методов. Я глубоко ошибался
Учсуд (2010-07-14 17:58:00) [8]ну и что что статический.
вот если бы был приватным, то было бы чему удивляться
Учсуд (2010-07-14 17:57:00) [9]а что, если в предке есть статический метод, то его и вызвать уже нельзя?