以下のユニットでは、IMPLEMENTATION セクションで宣言された変数があります - ユニットに対してローカルです。また、引数を取り、その引数を問題のローカル変数に割り当てる TYPE セクションで宣言されたプロシージャもあります。この TFrame の各インスタンスには、 を介して一意の変数が渡されますpassMeTheVar
。
私がやりたいことは、フレームの各インスタンスがその変数の独自のバージョンを保持し、他のインスタンスとは異なり、それを使用してそれがどのように動作するかを定義することです。ただし、各インスタンスに異なる変数を明示的に渡したとしても、すべてのインスタンスが同じ値を使用しているように見えます。
すなわち:
Unit FlexibleUnit;
interface
uses
//the uses stuff
type
TFlexibleUnit=class(TFrame)
//declarations including
procedure makeThisInstanceX(passMeTheVar:integer);
private
//
public
//
end;
implementation
uses //the uses
var myLocalVar;
procedure makeThisInstanceX(passMeTheVar:integer);
begin
myLocalVar:=passMeTheVar;
end;
//other procedures using myLocalVar
//etc to the
end;
ここで、別のフォームのどこかに、このフレームをデザイン ペインにドロップしました。これらのフレームの 2 つを 1 つのフォームにドロップし、適切な場所で宣言することもあります。それぞれが次の点で一意です。
ThisFlexibleUnit : TFlexibleUnit;
ThatFlexibleUnit : TFlexibleUnit;
そして私がするとき:
ThisFlexibleUnit.makeThisInstanceX(var1); //want to behave in way "var1"
ThatFlexibleUnit.makeThisInstanceX(var2); //want to behave in way "var2"
どちらも同じ変数「myLocalVar」を共有しているようです。
原則として、私はこれを間違っていますか?これが正しい方法である場合、それは私が持っているものをデバッグすることの問題です(これは投稿するには大きすぎます)が、これが原則として正しくない場合、私が提案していることを行う方法はありますか?
編集:
さて、ここで学んだ教訓は、クラス定義はまさにそれだということです。多くのクラスを 1 つのユニットに入れることができ、セクション内のすべてのクラスのすべてのインスタンスがType
ユニットの実装セクションを共有します。