Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];

Вниз

Класс-оболочка в каждой форме, исходный - один в главной   Найти похожие ветки 

 
unreger   (2003-08-26 06:25) [40]

Наследование не устраивает тем, что не хочется наследовать поля класса, например, то поле, в котором хранится соединение должно быть одно для всего проекта, а все функции класса используют его.
Для каждого экземпляра TCDataWrapper будет вызываться конструктор предка для инициализации этого поля, что приведет к открытию нового соединения. Нельзя.

Тогда можно, конечно, в CDataWrapper хранить ссылку на это поле, вернее ссылку на объект, туда же, куда ссылается поле базового класса CData. Но это не правильно, поскольку значение поля часто меняется (объект пересоздается) и остлеживать вручную все ссылки...

Получается, мне надо работать именно с экземпляром базового класса, т.е.
constructor TCDataWrapper.Create(GeneralData: TCData)

а к методам будем обращаться так:

function TCDataWrapper.F1(): longint;
begin
F1:=GeneralData.F1(FormID);
end;

Правильно?


 
unreger   (2003-08-26 11:35) [41]

.


 
Skier   (2003-08-26 11:42) [42]


> поле, в котором хранится соединение должно быть одно для
> всего проекта, а все функции класса используют его.

В базовом классе делаешь свойство в котором хранишь соединение, а все
наследники его только используют (можешь сделать его read-only) и в своих
конструкторах не трогают, т.к. оно создаётся только в базовом классе.

Если я всё правильно уловил, то - так...


 
unreger   (2003-08-26 11:50) [43]

>т.к. оно создаётся только в базовом классе.

вот тут я недопонимаю

ссылка на объект "соединение" (TADOConnection) хранится в поле экземпляра класса CData

если я наследую ТCDataWrapper от ТCData, то копируются все поля и методы, т.е. в ТCDataWrapper появляется указатель на объект типа TADOConnection,

но при создании экземпляра CDataWrapper этот указатель еще никуда не указывает. Надо или вызвать конструктор предка или передать ссылку на уже существующий экземпляр CData.

А этого делать не хочется т.к. TADOConnection часто пересоздается.


 
Skier   (2003-08-26 11:56) [44]

Угу. Понял.
Но тогда твой вариант вполне подходит, IMHO.

Только :
TCData.Create; virtual; - конструктор базового класса;
TCDataWrapper.Create(GeneralData: TCData); reintroduce - конструктор класса - потомка;

Не подойдёт ?


 
unreger   (2003-08-26 12:00) [45]

reintroduce

Ой, какие слова ты знаешь... надо посмотреть что такое


 
unreger   (2003-08-26 12:29) [46]

ага, посмотрел, учту на будущее, но:

Класс-потомок, пожалуй, вообще не подойдет как идея.

Потому что должны выполняться только методы конкретного экземпляра класса TCData, а эти методы работают с внутренними приватными полями и никто больше не должен их видеть.

TCDataWrapper ничего не добавляет к функциональности, его едиственное назначение - избавить меня от необходимости вручную передавать идентификатор формы в методы TCData.


 
Skier   (2003-08-26 12:30) [47]


> Класс-потомок, пожалуй, вообще не подойдет как идея.

Ну тогда не создавай его. Что ещё проще...


 
unreger   (2003-08-26 13:31) [48]

да, но это еще надо было понять.

Никто не хочет прокомментировать идею переноса обработчиков ошибок из форм в CData. Т.е. из какой бы формы не вызывались методы CData, я всегда могу вывести MessageBox с родителем-формой, в которой произошла ошибка, но главное, можно будет дописывать уникальные (специфические) способы исправления ошибок для конкретной формы, или пользоваться общим, универсальным.

Хотя вот тут http://delphimaster.net/view/1-1061811424/ немного задумался, похоже не получится проверять наличие метода у формы


 
Skier   (2003-08-26 13:34) [49]


> да, но это еще надо было понять.

В этом-то всё и дело - ты видимо ещё сам не разобрался до конца что
же тебе надо...



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

Форум: "Основная";
Текущий архив: 2003.09.08;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.009 c
8-24561
LK
2003-05-12 16:26
2003.09.08
Midi API


1-24438
shark
2003-08-25 16:14
2003.09.08
Вызов функции из функции


8-24553
sd
2003-05-09 12:54
2003.09.08
windows media player


3-24298
P0tia
2003-08-19 12:42
2003.09.08
Переход на другую строку


3-24332
ViJen
2003-08-18 12:53
2003.09.08
Паковка dbf





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский