Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.26;
Скачать: CL | DM;

Вниз

Владелец коллекции   Найти похожие ветки 

 
Navi   (2004-09-12 10:55) [0]

Здравствуйте!
Есть такая добрая статья Юрия Зотова "Коллекции и работа с ними". Там, функция, возвращающая владельца коллекции должна возвращать тип TPersistent. А если у меня ее владелец TObject?
Спасибо.


 
DiamondShark ©   (2004-09-12 12:13) [1]

Ну и что? Пусть возвращает TObject. Просто такую коллекцию нельзя будет в инспекторе объектов показать.
В чём проблема-то?


 
Navi   (2004-09-12 12:51) [2]

> DiamondShark "... В чём проблема-то?"
А в том, что для TPersistent (папа TCollection):
function GetOwner: TPersistent; dynamic;

Соответственно:
function GetOwner: TObject; override; выдает Declaration of "GetOwner" differs from previous declaration.

А приведение:
function TMyCollection.GetOwner: TPersistent;
begin
 Result:= TPersistent(FPage);
end; выдает Access violation.


 
Семен Сорокин ©   (2004-09-12 14:18) [3]

Navi   (12.09.04 12:51) [2]
Не только в Object Inspectore показывать нельзя будет, но также не будет метода Assign (и иже с ним), для присвоения.
А если у меня ее владелец TObject?
Сделайте его хотя бы TPersistent, там всего (если точно помню) один метод переопределить надо.


 
Юрий Зотов ©   (2004-09-13 12:10) [4]

> Navi   (12.09.04 10:55)

Изначально коллекции вводились для того, чтобы выступать в качестве списков, которые можно редактировать в Design-time и которые умеют сохраняться в DFM. То есть, для того, чтобы быть published-свойствами некоего объекта-контейнера (которым и является Owner). Это и есть основной смысл и основное назначение коллекций.

Но раз коллекция является внутренним свойством Owner"а, то вполне естественно, что внутри него же она и сохраняется. А самым верхним классом по иерархии классов VCL, который умеет сохраняться в поток, является TPersistent. Вот поэтому у самого TPersistent метод GetOwner и определен, как тоже TPersistent, а не Tobject. Поскольку коллекции (а также TFont, TBrush, TPen и т.д.) наследуются от TPersistent, то тем самым они приобретают способность сохраняться внутри своего Owner"а.

Значит - если сохранение в DFM Вам нужно, то Owner"ом должен быть все же TPersistent, а не TObject (либо Вам придется писать свой собственный механизм сохранения). А если не нужно, то вряд ли Вам нужна и сама коллекция - вполне достаточно будет отнаследовать Ваш список от TList.



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.039 c
1-1095149865
}|{yk
2004-09-14 12:17
2004.09.26
Глюк с Excel и Win98


3-1093675762
schoolboy
2004-08-28 10:49
2004.09.26
Append в ApolloTable


14-1093665713
Григорьев Антон
2004-08-28 08:01
2004.09.26
211.34.96.11 - адрес трусливого ничтожества


8-1088767843
Roman111
2004-07-02 15:30
2004.09.26
О DirextX в Delphi


3-1093521589
Топ
2004-08-26 15:59
2004.09.26
Дельфи+фокспро