我目前正在重写一个免费的教育数字电路模拟器,以增加其特性的惯性。我的问题是如何将事件分派给原始类,为它们添加预详细说明。我有这样的事情:
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,专门化 300 多个继承自 TC1 的组件的行为。
但是现在我必须添加一些特殊操作(每次调用 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 的任何后代均不同)。
任何人都可以提出一种方法来做到这一点?