当前位置 : 主页 > 手机开发 > 其它 >

如何在一个类中封装不同的类来保持它们独特的方法? (在delphi中多重继承?

来源:互联网 收集:自由互联 发布时间:2021-06-19
我目前正在重写一个免费的教育数字电路模拟器,以增加其功能的惯性.我的问题是如何将事件分派给原始类,为它们添加预先详细说明.我有这样的事情: TC1 = class ID: integer; Connections : a
我目前正在重写一个免费的教育数字电路模拟器,以增加其功能的惯性.我的问题是如何将事件分派给原始类,为它们添加预先详细说明.我有这样的事情:

TC1 = class
  ID: integer;
  Connections : array [integer] of Pin;
  function Func1; virtual;
  function FuncN;
end;

TC2-1 = class (TC1)
  function Func1; override;
  function My1Func();
end;

TC2-n = class (TC1)
  function Func1; override;
  function MyNFunc();
end;


TContainer = class
  C1 : TC1;
  function ContFunc;
end;

function Container.ContFunc;
begin
    c1.Func1;
end;

现在这意味着ContFunc根据需要调用C2.Func1,专门处理从TC1继承的300多个组件的行为.

但现在我必须添加一些特殊操作(对所有组件后代都相同)
每次调用Func1时从TC1开始,如果必须的话,在操作期间选择
是否调用TC2-n.Func1(更改祖先TC1的某些属性后).
有没有办法干净地做到这一点,而不改变TC1的所有后代?
我可以使用这样的辅助类(不建议使用?):

TH = class helper of TC1
  function Func1 virtual; override;
end;

function TH.Func1;
begin
  if x then TC2.Func1 else SaveActionData; 
end

如果我添加TH,当TContainer调用Func1时,谁被调用?
它按我的意愿调用TC2.Func1而不是TH.Func1.
有没有办法覆盖下降方法Func1
没有为任何一个人写一个助手类(他们会做所有
相同的操作,意味着完全相同的代码)?
可以从TH调用TC2-n的300个后代函数Func1?

换句话说,我试图通过Tcontainer调用c1.Func1来找到一种方法来获得这样的调用;:

调用TC2.Func1的NewFunc1(对于所有TC1后代都相同)(对于TC1的任何后代都不同).

任何人都可以建议一种方法吗?

每当有人调用Func1时,您都需要执行一些任务,无论后代在其重写方法中选择做什么.这是模板方法模式的工作.

为基类提供一个公共非虚方法Func1,它执行您需要的操作,然后调用受保护的虚方法.后代可以覆盖该虚方法,但使用该类的任何人都只能调用公共非虚方法.

type
  TC1 = class
  protected
    function InternalFunc1: Integer; virtual; // abstract?
  public
    function Func1: Integer;
  end;

function TC1.Func1;
begin
  if x then
    Result := InternalFunc1
  else
    Result := SaveActionData; 
end;

现在后代可以覆盖InternalFunc1,基类将确保仅在适当时调用它.

type
  TC2 = class(TC1)
  protected
    function InternalFunc1: Integer; override;
  end;

您需要在所有300个后代类中重命名当前的Func1函数. IDE的重构工具可能能够帮助解决这个问题.

网友评论