質問:循環参照を避けながら、2つのクラスを独自のファイルに分割したいと思います。
私はいくつかのクラス(およびいくつかの列挙と定数)を持つユニットを持っています。誰もがタペット兄弟のクリックアンドクラックを認識します:
unit Cartalk;
interface
type
TSolution = (solTransmission, solBrakes, solGremlins);
TTappetBrother = class(TObject)
public
function GetSolution: TSolution; virtual; abstract;
end;
TClick = class(TTappetBrother)
public
function GetSolution: TSolution; override;
end;
TClack = class(TTapperBrother)
public
function GetSolution: TSolution; override;
end;
implementation
function TClick.GetSolution: TSolution;
begin
Result := solTransmission;
end;
function TClack.GetSoltution: TSolution;
begin
Result := solGremlins;
end;
end.
今は明らかに私の2つのクラスTClick
でありTClick
、非常に複雑です。管理しやすくするために、既存の外部コードを壊さずに、独自のユニットに分割TClick
して分割したいと思います。TClack
それで私の最初の亀裂は次のようになります:
unit Cartalk;
interface
uses
Cartalk_Click, Cartalk_Clack;
type
TSolution = (solTransmission, solBrakes, solGremlins);
TTappetBrother = class(TObject)
public
function GetSolution: TSolution; virtual; abstract;
end;
TClick = Cartalk_Click.TClick; //alias brought in from Cartalk_Click.pas
TClack = Cartalk_Clack.TClack; //alias brought in from Cartalk_Clack.pas
implementation
end.
完璧です、私はで利用可能なすべての同じクラスを持っていますCartalk.pas
、今私はただ書く必要がCartalk_Click.pas
ありCartalk_Clack.pas
ます:
unit Cartalk_Click;
interface
type
TClick = class(TTappetBrother)
public
function GetSolution: TSolution; override;
end;
implementation
function TClick.GetSolution: TSolution;
begin
Result := solTransmission;
end;
end.
もちろん、問題はそれでTTappetBrother
ありTSolution
、このユニットでは宣言されていません。そこで、彼らが住んでいる場所への参照を追加し、uses
それが失敗するのを見て、私の質問の中心に到達します:
unit Cartalk_Click;
interface
uses
Cartalk;
type
TClick = class(TTappetBrother)
public
function GetSolution: TSolution; override;
end;
implementation
function TClick.GetSolution: TSolution;
begin
Result := solTransmission;
end;
end.
との間に循環参照がCartalk
ありCartalk_Click
ます。
注:もちろん、私はCartalkユニットを持っていません。クリックして、タッパー兄弟をクラックします。これは単なる例です。実際には、ユニットに3つのクラス、20の列挙、および293の定数があります。