Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];
ВнизНаследование Найти похожие ветки
← →
Пубертанец (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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.035 c