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

Вниз

насколько приемлем такой конструктор?   Найти похожие ветки 

 
umbra ©   (2006-11-25 13:38) [0]

Я создаю некий набор наследников от 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;


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


 
Palladin ©   (2006-11-25 13:43) [1]

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


 
umbra ©   (2006-11-25 14:12) [2]

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

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

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


 
umbra ©   (2006-11-25 14:22) [3]

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

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

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


 
Palladin ©   (2006-11-25 14:35) [4]


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

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


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

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


 
GrayFace ©   (2006-11-25 15:03) [5]

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


 
GrayFace ©   (2006-11-25 15:05) [6]

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


 
Palladin ©   (2006-11-25 16:27) [7]


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

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


 
umbra ©   (2006-11-27 10:32) [8]

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


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


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

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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.056 c
4-1157308645
иван8511
2006-09-03 22:37
2007.01.21
Печать на матричном принтере.


11-1144677838
Ал
2006-04-10 18:03
2007.01.21
KOLmdvOpenSaveDialog-некорректная работа при DoubleBuffered формы


8-1144257990
suharew
2006-04-05 21:26
2007.01.21
Запись экрана монитора


2-1167867933
Riply
2007-01-04 02:45
2007.01.21
Ожидание начала работы нити.


3-1162210429
Rickkk
2006-10-30 15:13
2007.01.21
Проблема с lookup-полями в запросе