ユニットの実装セクションの uses 句にユニットを配置した場合、そのようなユニットで宣言された識別子はインターフェイス セクションでは使用できません。
それを行うことと、参照されたユニットの識別子をインターフェイスで使用できないことの利点は何ですか?
単純にインターフェイス セクションではなく、実装セクションに使用済みユニットを追加した場合、実用的な利点 (望ましくない副作用を回避するなど) はありますか?
ユニットの実装セクションの uses 句にユニットを配置した場合、そのようなユニットで宣言された識別子はインターフェイス セクションでは使用できません。
それを行うことと、参照されたユニットの識別子をインターフェイスで使用できないことの利点は何ですか?
単純にインターフェイス セクションではなく、実装セクションに使用済みユニットを追加した場合、実用的な利点 (望ましくない副作用を回避するなど) はありますか?
uses
セクションの句にユニットを追加すると、そのユニットは、ではなく に対してimplementation
のみプライベートな依存関係になることができます。UnitA が UnitB を使用しているが、UnitA のインターフェイスが UnitB を使用していないため、UnitA の外部の誰もが UnitA が UnitB を使用しているかどうかを気にしない場合、なぜ依存関係を宣伝し、. また、UnitB を削除したり、別のものに置き換えたりする必要がある場合は、セクションの句で宣言することで、 UnitA を使用しているユニットに影響を与える変更を回避できます。implementation
interface
interface
uses
implementation
interface
最大の問題は、インターフェイス セクションでの使用が循環依存関係とコンパイルの失敗につながる可能性があることです。ユニット A がインターフェース セクションでユニット B を使用する場合、ユニット B はそのインターフェース セクションでユニット A を使用できません。
そのため、少なくともいくつかの用途を実装セクションに入れることを余儀なくされることがよくあります。
それ以外の場合は、可能であれば、ユニットの使用をインターフェイス セクションに入れることを個人的に好みます。主な理由は、スコープと非表示の 1 つです。名前の範囲の衝突 (2 つのユニットが同じ名前を定義し、2 番目の使用で最初の名前が隠される) がある場合は、ユニット全体で同じ名前が範囲内にありました。