Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.036 c
3-40818
Man
2003-10-25 15:47
2003.11.13
Как в SQL выгребсти записи с n1 по n2


4-42255
w666w
2003-09-15 15:02
2003.11.13
Drag & Drop - без WinAPI никуда...


1-41229
LG
2003-11-01 08:31
2003.11.13
Как Progressbar в ListView


1-41185
snake1977
2003-11-02 15:50
2003.11.13
два приложения


1-41615
Layner
2003-10-22 13:20
2003.11.13
Как округлить число с 5 знаками после запятой до 3х знаков?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский