Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.10.10;
Скачать: 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 вся ветка

Текущий архив: 2010.10.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
15-1278707383
Юрий
2010-07-10 00:29
2010.10.10
С днем рождения ! 10 июля 2010 суббота


4-1210238349
tytus
2008-05-08 13:19
2010.10.10
как прочитать текст с чужого ListView?


2-1279538562
fib
2010-07-19 15:22
2010.10.10
TpFIBDataSet вызвать SQL Generator в Run-time


4-1240850870
AndreyRus
2009-04-27 20:47
2010.10.10
hfile собственного процесса


15-1278618937
xayam
2010-07-08 23:55
2010.10.10
DGT-доски