Вниз
Скачать: CL | DM;

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

 
mc_duck   (2003-11-09 18:16) [0]

Можно ли как -нибудь породить класс от двух родительских,конкретно
TPaintBox И TCollectionItem?


 
mc_duck   (2003-11-09 18:38) [1]

Или никак?


 
Anatoly Podgoretsky ©   (2003-11-09 18:51) [2]

Или


 
mc_duck   (2003-11-09 19:02) [3]

Ну а если обязательно нужно создать класс,имеющий свойства 2 классов, то что,тупик? А с помощью интерфейса как-нибудь породить
от TPaintBox И TCollectionItem можно?


 
y-soft ©   (2003-11-09 19:07) [4]

Нельзя - в Object Pascal это не поддерживается.

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


 
mc_duck   (2003-11-09 19:08) [5]

->y-soft
По цепочке?


 
y-soft ©   (2003-11-09 19:20) [6]

>mc_duck (09.11.03 19:08) [5]

Нет, в этом случае новый класс становится контейнером для этих классов. Вот очень простой пример:


type
TMyClass = class(TObject)
private
fFirstClass : TFirstClass;
fSecondClass : TSecondClass;
public
constructor Create;
destructor Destroy; override;
property FirstClass : TFirstClass
read fFirstClass write fFirstClass;
property SecondClass : TSecondClass
read fSecondClass write fSecondClass;
end;

...
constructor TMyClass.Create;
begin
inherited Create;
fFirstClass := TFirstClass.Create;
fSecondClass := TSecondClass.Create;
end;

destructor TMyClass.Destroy;
begin
if assigned(fFirstClass) then
fFirstClass.Free;
if assigned(fSecondClass) then
fSecondClass.Free;
inherited;
end;


 
y-soft ©   (2003-11-09 19:31) [7]

Да, правильней было написать немного не так:



type
TMyClass = class(TObject)
private
fFirstClass : TFirstClass;
fSecondClass : TSecondClass;
procedure SetFirstClass(Value : TFirstClass);
procedure SetSecondClass(Value : TSecondClass);
public
constructor Create;
destructor Destroy; override;
property FirstClass : TFirstClass
read fFirstClass write SetFirstClass;
property SecondClass : TSecondClass
read fSecondClass write SetSecondClass;
end;

...
constructor TMyClass.Create;
begin
inherited Create;
fFirstClass := TFirstClass.Create;
fSecondClass := TSecondClass.Create;
end;

destructor TMyClass.Destroy;
begin
if assigned(fFirstClass) then
fFirstClass.Free;
if assigned(fSecondClass) then
fSecondClass.Free;
inherited;
end;

procedure TMyClass.SetFirstClass(Value : TFirstClass);
begin
//Ничего не делаем
end;

procedure TMyClass.SetSecondClass(Value : TSecondClass);
begin
//Ничего не делаем
end;




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

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.027 c
1-65978
UNick
2003-11-10 15:46
2003.11.20
Как узнать размер папки?


3-65727
gestern
2003-11-01 18:28
2003.11.20
Генератор IB


1-65859
Ricks
2003-11-09 11:59
2003.11.20
Office11 или ExpressBars Suite v5


11-65804
Boguslaw
2003-03-03 12:28
2003.11.20
Before GOODWELL


1-65866
Jack
2003-11-09 14:34
2003.11.20
Возвращаясь к хинтам!




   Наверх