interfacetype TA = class public procedure F1; end; TB = class public procedure F2; end; TC = class(TA{继承A}) private B: TB;{托管B} public construction Create; destruction Destroy; override; procedure F2; end;implementionprocedure TA.F1; begin ShowMessage('Call F1'); end;procedure TB.F2; begin ShowMessage('Call F2'); end;construction TC.Create; begin B := TB.Create; end;destruction TC.Destroy; begin B.Free; end;procedure TC.F2; begin B.F2; end;end. 以上手写的可能有失误请谅解。
你确定TRealICQContacterTreeView跟TTreeView和有关系么?
在控件行为上
TRealICQContacterTreeView有a,b,c的行为
TTreeView有d,e,f的行为--------------
不表示你继承下来的新控件就有a,b,c,d,e,f的行为啊?
===========================
你可以考虑接口
继承TRealICQContacterTreeView;实现定义的接口ITreeView接口的实现ITreeView用适配器模式,适配TTreeView
public
procedure F1;
end; TB = class
public
procedure F2;
end; TC = class(TA{继承A})
private
B: TB;{托管B}
public
construction Create;
destruction Destroy; override;
procedure F2;
end;implementionprocedure TA.F1;
begin
ShowMessage('Call F1');
end;procedure TB.F2;
begin
ShowMessage('Call F2');
end;construction TC.Create;
begin
B := TB.Create;
end;destruction TC.Destroy;
begin
B.Free;
end;procedure TC.F2;
begin
B.F2;
end;end.
以上手写的可能有失误请谅解。
public
procedure F2; virtual;stdcall;abstract;
end;TC = class(TA{继承A},IB{实现接口})
//... ...
procedure F2;
TFaucet3 = class //3孔的插座
public
procedure action(fireline: integer; zeroline: integer; terra: integer);//3孔插口
end;IFaucet2 = class //2孔插座的接口
public
procedure action(fireline: integer; zeroline: integer);virtual;abstract;//2孔插口TFaucet2Adapter = class(IFaucet2) //2孔插座的适配器,实现IFaucet2接口
public
procedure action(fireline: integer; zeroline: integer); override; //2孔插口
private
FFaucet3: TFaucet3; //托管
end;procedure TFaucet2Adapter.action(fireline: integer; zeroline: integer);
begin
FFaucet3.action(fireline, zeroline, 0);//将3孔插口转换为2孔插口,其中火线接火线,零线接零线,地线没有接
end;
TA=class(TB,TC)
//TA class define
end;这样就行了。