问题描述
我有以下结构...我制作的三个控件,它们继承自同一个公共控件 TCustomControl
。
TDriveBar [MyShell.pas] > TCustomPanel [Vcl.ExtCtrls.pas] > TCustomControl [Vcl.Controls.pas]...
TPathBar [MyShell.pas] > TCustomControl [Vcl.Controls.pas]...
TFileList [MyShell.pas] > TCustomSuperList [MySuperList.pas] > TCustomControl [Vcl.Controls.pas]...
现在,我想改变一些东西,以便我的 TDriveBar
、TPathBar
和 TFileList
可以作为一个共同的祖先类被访问(类型转换)并且有一些共同的新方法。那个祖先似乎是TCustomControl
,但我不知道是否可以在那里插入一个新类。更重要的是,我希望 TCustomSuperList
在单独使用时不要包含这些新方法。不知道有没有让自己明白...
我不能使用接口,因为我的想法是只编写一次通用方法并在那些控件中使用它们......有了接口,我必须在每个 Shell 控件中实现它......
解决方法
Delphi 能够使用关键字 implements 将接口的方法委托给另一个对象。
在您的情况下,想法是创建一个对象,实现一个具有通用方法的接口,并在您的每个组件中创建一个具有接口类型并委托给该对象的属性。