Вниз
Скачать: CL | DM;

вопрос по 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.005 c
2-1279266764
Hapastiks
2010-07-16 11:52
2010.10.10
получения шапки программы через OpenDialog


15-1278656926
И. Павел
2010-07-09 10:28
2010.10.10
Выполнился ли post/get через WebBrowser.Navigate


6-1226928849
com
2008-11-17 16:34
2010.10.10
узнать, есть ли открытые смб-ресурсы на конкретном ип


2-1279264750
И. Павел
2010-07-16 11:19
2010.10.10
Ошибка: "Cannot change visible in OnShow or OnHide"


2-1279354024
Student :)
2010-07-17 12:07
2010.10.10
программно свернуть чужую программу




   Наверх