Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

вопрос по 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]

а что, если в предке есть статический метод, то его и вызвать уже нельзя?


Наверх

Титульная страница Поиск, карта сайта Написать письмо