Форум: "Начинающим";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];
Внизвопрос по inherited Найти похожие ветки
← →
DFT (2010-07-14 17:09) [0]Здравствуйте, уважаемые мастера!
Вопрос простой, наверное, но, он сбил меня с толку.
В классе 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-14 17:57) [1]а что, если в предке есть статический метод, то его и вызвать уже нельзя?
← →
Учсуд (2010-07-14 17:58) [2]ну и что что статический.
вот если бы был приватным, то было бы чему удивляться
← →
DFT (2010-07-14 18:05) [3]Спасибо, Учсуд! А я всегда полагал, что inherited вызывается только для виртуальных методов. Я глубоко ошибался
← →
Leonid Troyanovsky © (2010-07-14 18:12) [4]
> 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.
← →
Anatoly Podgoretsky © (2010-07-14 20:07) [5]> DFT (14.07.2010 18:05:03) [3]
Очень глубоко.
← →
DFT (2010-07-14 20:26) [6]Всем спасибо за помощь и комментарии :)
← →
han_malign (2010-07-15 09:22) [7]для статического метода это можно сделать и прямым приведением
Result := TList(Self).Add(AObject);
Контрольные вопросы:
1. почему так нельзя поступить с виртуальным методом?
2. для чего было введено ключевое слово inherited?
← →
Учсуд (2010-07-15 16:55) [8]патаму что виртуальный метод диспетчеризируетсо не по типу переменной, а по типу экземпляра.
← →
Плохиш © (2010-07-15 23:09) [9]
> han_malign (15.07.10 09:22) [7]
Описание языка не пробовал почитать?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.10.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c