我目前正在重写一个免费的教育数字电路模拟器,以为其功能添加惯性。我的问题是如何将事件分派到原始类,并向它们添加预先阐述。我有这样的事情:
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(对于 TC1 的任何后代都不同)的 NewFunc1(对于所有 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;
您需要重命名当前的Func1
在您所有 300 个后代类别中发挥作用。 IDE 的重构工具也许能够帮助解决这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)