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

Вниз

Наследование   Найти похожие ветки 

 
Пубертанец   (2003-10-29 12:01) [0]

Есть класс1, в котором есть protected член класса cds: TQuery. Есть другой класс2 - наследник класса1, но мне нужно, чтобы cds было уже типа TClientDataSet. Как можно это сделать?


 
Skier ©   (2003-10-29 12:03) [1]


> Как можно это сделать?

cds : TDataSet;


 
Пубертанец   (2003-10-29 12:09) [2]

Да, но если это будет TDataSet, тогда мне нужно будет к методам cds обращаться через (cds as TQuery) или (cds as TClientDataSet).

Например, есть такой метод:

procedure foo;
begin
showmessage(cds.Params[0].AsString);
end;

И такую процедуру не надо переопределять. А если cds - TDataSet, то в родительском классе придется писать showmessage((cds as TQuery).Params[0].AsString);, а в наследнике - showmessage((cds as TClientDataSet).Params[0].AsString); - а переопределять такие методы ой как не хочется


 
Skier ©   (2003-10-29 12:13) [3]


> тогда мне нужно будет к методам cds обращаться через (cds
> as TQuery) или (cds as TClientDataSet).

Да.


 
Пубертанец   (2003-10-29 12:32) [4]

А другого решения нет?


 
Skier ©   (2003-10-29 12:32) [5]

Нет.


 
Ломброзо ©   (2003-10-29 12:36) [6]

Есть. Создать абстрактного родителя и родить от них контейнеры для TClientDataSet и TQuery.


 
Skier ©   (2003-10-29 12:38) [7]

>Ломброзо © (29.10.03 12:36) [6]

> контейнеры для TClientDataSet и TQuery.

Поподробней...


 
Ломброзо ©   (2003-10-29 12:59) [8]

вы и сами все прекрасно знаете )
type
//
TParent = class
FDs: TDataSet;
function GetDataSet: TDataSet; virtual; { result := FDs }
end;

TQrContainer = class(TParent)
FDs: TQuery;
function GetDataSet: TQuery; override; { result := FDs }
end;
TCDSContainer = class(TParent)
FDs: TClientDataSet;
function GetDataSet: TClientDataSet; override; { result := FDs }
end;

По-моему, не стоит делать один класс делать наследником другого, если они реализуют функционал объектов не наследующихся друг от друга классов.



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

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

Наверх




Память: 0.48 MB
Время: 0.077 c
1-41439
Vitalik
2003-10-29 13:06
2003.11.13
перегрузка виртуальных функций


1-41244
RudeBoy
2003-11-01 00:24
2003.11.13
Как узнать что в моём приложении был нажа скрол мышки?


4-42246
pum5a
2003-09-13 16:40
2003.11.13
Как найти контрол по его WHND (кроме FindControl)?


11-41124
Maxim Pushkar
2003-02-13 01:00
2003.11.13
Проблемы с конвертацией дат и NewFileStream


1-41251
DimaK
2003-10-25 13:01
2003.11.13
Запись в файл