Вниз
Скачать: 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.006 c
2-1278925532
linuxoid
2010-07-12 13:05
2010.10.10
помогите с пингом


15-1278319716
oxffff
2010-07-05 12:48
2010.10.10
Кто-нибудь использовал Unmanaged API Reference .NET?


6-1225988097
vegarulez
2008-11-06 19:14
2010.10.10
Вопрос про POST


15-1278792046
Kerk
2010-07-11 00:00
2010.10.10
Посоветуйте WiFi-роутер


15-1278590211
ocean
2010-07-08 15:56
2010.10.10
Зачем металлическое кольцо




   Наверх