サードパーティ コンポーネントを修正する必要があります。このコンポーネントのクラスには、その子孫によってアクティブに使用されるプライベート変数があります。
TThirdPartyComponentBase = class
private
FSomeVar: Integer;
public
...
end;
TThirdPartyComponent = class (TThirdPartyComponentBase)
protected
procedure Foo; virtual;
end;
procedure TThirdPartyComponent.Foo;
begin
FSomeVar := 1; // ACCESSING PRIVATE FIELD!
end;
これは、両方のクラスが同じユニットに属しているため機能するため、「友達」のようなものです。
しかし、新しい単元で新しいクラスを作ろうとすると
TMyFixedComponent = class (TThirdPartyComponent)
procedure Foo; override;
end;
FSomeVar にはもうアクセスできませんが、修正のために使用する必要があります。そして、基本クラスのすべてのツリーを自分のコードで再現したくありません。
可能であれば、元のコンポーネントのユニットを変更せずにそのプライベート フィールドにアクセスする簡単なハックをアドバイスできますか?