私は現在、無料の教育用デジタル回路シミュレーターを書き直して、その機能に慣性を追加しています。私の問題は、イベントを元のクラスにディスパッチして事前精緻化を追加する方法です。私はこのようなものを持っています:
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 を呼び出すと、誰が呼び出されますか? TH.Func1 ではなく、TC2.Func1 を呼び出します。単一のヘルパークラスを作成せずに子孫メソッド Func1 をオーバーライドする方法はありますか? TH から TC2-n の 300 個の子孫関数 Func1 を呼び出すことができます。
つまり、c1.Func1; への Tcontainer 呼び出しによって、次のような呼び出しを取得する方法を見つけようとしています。
TC2.Func1 を呼び出す NewFunc1 (すべての TC1 子孫に等しい) (TC1 の子孫には異なる)。
誰でもそれを行う方法を提案できますか?