別々のDLLの部分クラスに2つの部分(同じ名前空間、同じクラス名)を持つことは可能ですか?
7 に答える
MSDNから-部分的なクラスとメソッド:
同じタイプの一部であることが意図されているすべての部分タイプ定義は、同じアセンブリおよび同じモジュール(.exeまたは.dllファイル)で定義する必要があります。部分的な定義は、複数のモジュールにまたがることはできません。
いいえ。部分クラスは純粋に言語機能です。アセンブリがコンパイルされると、ファイルが結合されてタイプが作成されます。ファイルを別のアセンブリに分散させることはできません。
ただし、実行したいことによっては、拡張メソッドを使用して必要なことを実行できる場合があります。
いいえ、できません。アセンブリがコンパイルされたら、クラスを終了する必要があります。
他の答えは、このページにたどり着いた人が見たり聞いたりしたくないという不快な「いいえ」を提供しますが、私はまだここで言及されていない別の考えに感銘を受けました。アセンブリ間で部分的なクラスが許可された場合、自分が作成していない既存のタイプのプライベートメンバーにアクセスできるため、元の作成者が意図していない方法でそれらを操作できるようになり、継承するすべてのクラスの機能が危険にさらされます。それも。
それだけでなく、他のアセンブリ(およびその子)のクラスを再コンパイルして機能させる必要があります。したがって、クラスを異なるアセンブリに分割することを許可することは論理的に不可能です。
別のdllのクラスにメソッドを追加する場合は、拡張メソッドを使用できます。このメソッドの1つの欠点は、静的メソッドを追加できないことです。
問題は、なぜ別のアセンブリで部分クラスを作成したいのかということです。アセンブリ間で抽象クラスとインターフェースを定義できます。おそらくそれを調べる必要があります。
おそらく、自分のライブラリ内で、第3部ライブラリのクラスの周りにWrapperクラスを作成したいだけです。次に、ラッパークラスに機能を追加します。