いくつかの dll を参照するクラス ライブラリ プロジェクトを作成しました。私のクラス ライブラリ プロジェクトのコンストラクターでは、参照されている dll の 1 つからいくつかの列挙型を使用します。私のクラス ライブラリを別のプロジェクトで使用する場合、私の dll への参照と、私のクラス ライブラリ プロジェクトが内部的に参照するものへの参照を追加する必要はありませんか?
6 に答える
内部参照の意味によって異なります。
アプリケーション プロジェクトがクラス ライブラリの型 A を使用し、そのクラスが他のライブラリ (サード パーティかどうかに関係なく) のパブリック型を公開しない場合、型 A を含むクラス ライブラリ以外への参照を追加する必要はありません。
ただし、型 A がいくつかのパブリック プロパティ、型を返すメソッド、または型のパラメーターを受け取るメソッドを公開している場合、または型 A が他のアセンブリにある型から派生している可能性がある場合は、その他のアセンブリへの参照も必要です。
したがって、本当にuses internalを意味する場合は、クラス ライブラリへの参照を 1 つ以上追加する必要はありません。
ただし、コンパイラが文句を言う場合は、それが重要です。
DLL を参照するだけです。アセンブリで使用するもののみを参照します。アセンブリは完全に自己記述的な個々のユニットであるため、参照されたアセンブリが参照する参照を参照する必要はありません(ここで「参照」という言葉を繰り返し使用することに冗談を言っています:-)。
それをしなければならなかったとしたら想像してみてください - BCL は多くの異なるものを参照し、サードパーティのコンポーネントは言うまでもなく、参照を正しくするだけでどれだけの労力が必要になるか想像してみてください!!
参照されたアセンブリが公開している型を参照している場合 (メンバーまたは型指定されたインスタンスのみであっても)、そのアセンブリへの参照も含める必要があります。
ctor で独自の列挙型を取得し、それをサードパーティの列挙型に変換します。これにより、呼び出し元がサードパーティのアセンブリを参照する必要がなくなると思います (もちろん、コードが機能するために実行時に利用できる必要があります)。
lassevk が簡潔に説明したと思いますが、DLL によって使用される追加のアセンブリを参照する必要はありませんが (ここでも、それらが内部でのみ使用され、公開されていないと仮定して)、それらをアクセス可能にする必要があることを追加したかっただけです。あなたの申請。つまり、アプリケーションと一緒に、または GAC で検索可能でなければなりません。そうしないと、それらを使用する DLL がそれらを見つけることができません。
何をしようとしているのかはわかりませんが、したくない場合はアセンブリを参照する必要はありません。反射を使用できます。これは通常、ハックと見なされ、推奨されませんが、必要な場合もあります。 方法を説明する記事があります。