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

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

насколько приемлем такой конструктор? [D7, Win95/98]


umbra ©   (2006-11-25 13:38:00) 

Я создаю некий набор наследников от TCollectionи, соответственно, от TCollectionItem. Поскольку значения свойств для элементов коллекций я получаю из строк текстовых файлов, то в базовом абстрактном классе элемента я перегрузил конструктор TCollectionItem, добавив еще один параметр.


TAccountEntry = class(TCollectionItem)
{..............................................}
public
   constructor Create(Collection: TCollection; Data: String); reintroduce; overload;
{.............................................}
end;


При создании наследника базового класса ( TPFUPSVEntry = class(TAccountEntry)) возможна ситуация , когда данных еще нет (это известно до создания). Поэтому его конструктор имеет вид

constructor TPFUPSVEntry.Create(Collection: TCollection; Data: String);
begin
 if Data = '' then
   inherited Create(Collection)
 else
   inherited;
end;


Вопрос заключается в том, какие подводные камни возможны при такой схеме. Заранее спасибо!


umbra   (2006-11-27 10:32:00) [1]

2 GrayFace ©   (25.11.06 15:03) [5]


> О том, что reintroduce не нужен.


а чем он мешает? как следует из справки, этот спецификатор всего-навсего говорит компилятору не генерировать предупреждение о скрытии родительского конструктора.

2 Palladin ©   (25.11.06 14:35) [4]
> если не трогать конструктор Create...

вы имеете в виду конструктор TCollectionItem? Но ведь его все равно придется вызвать в перепредставленном конструкторе.


Palladin   (2006-11-25 16:27:00) [2]


> сериалиализации

эко меня замкнуло... )


GrayFace   (2006-11-25 15:05:00) [3]

Это был ответ на [2] :)


GrayFace   (2006-11-25 15:03:00) [4]

О том, что reintroduce не нужен. Вот только не понятно, что должен делать код Create. По идее, этот пустой inherited вообще не должен транслироваться.


Palladin   (2006-11-25 14:35:00) [5]


> umbra ©   (25.11.06 14:22) [3]

чтение коллекции из потока, имеется в виду, при сериалиализации компонента, если вдруг созданную коллекцию придется сохранять, а потом считывать. это первое что пришло в голову по поводу камней. сюда же относится и все что связано с созданием коллекции не "в ручную"... когда VCL рулит созданием ее item'ов... это логически вытекает...


> решает ли  перенос проверки строки на наличие содержания
> в базовый класс проблему о которой Вы говорили?

вот уж не знаю, решает в принципе - если не трогать конструктор Create...


umbra   (2006-11-25 14:22:00) [6]

2 Palladin ©   (25.11.06 13:43) [1]

> Рекомендую вместо перепредставления конструктора добавить
> еще один.

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


umbra   (2006-11-25 14:12:00) [7]

посмотрел на то, что написал, и подумал: а зачем я это в наследнике делаю, если можно в базовом классе!

2 Palladin ©   (25.11.06 13:43) [1]

Честно говоря, не понял о чем идет речь :)


Palladin   (2006-11-25 13:43:00) [8]

При сериализации, чтения коллекции возникнут. Рекомендую вместо перепредставления конструктора добавить еще один.


Наверх

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