web-dev-qa-db-ja.com

個別のdllの部分クラス

別のDLLの部分クラスに2つの部分(同じ名前空間、同じクラス名)を持たせることはできますか?

147
Brad

From MSDN -Partial Classes and Methods

同じ型の一部である部分型定義はすべて、同じアセンブリおよび同じモジュール(.exeまたは.dllファイル)で定義する必要があります。部分定義は複数のモジュールにまたがることはできません。

219
Justin Niessner

いいえ。部分クラスは純粋に言語機能です。アセンブリがコンパイルされると、ファイルが結合されて型が作成されます。ファイルを異なるアセンブリに分散させることはできません。

ただし、何をしたいかによっては、 拡張メソッド を使用して必要なことを実行できる場合があります。

35
Adam Robinson

いいえ、不可能です。アセンブリがコンパイルされたら、クラスを終了する必要があります。

12
Darin Dimitrov

他の答えは、このページに着いた人が見たり聞いたりしたくない不快な「いいえ」を提供しますが、ここでまだ言及されていない別の考えに感銘を受けました。アセンブリ全体で部分クラスが許可された場合、彼が作成したものではない既存の型のプライベートメンバーにアクセスできるため、元の作成者が意図していない方法でそれらを操作できるため、すべての継承クラスの機能が危険にさらされますも。

それだけでなく、他のアセンブリ(およびその子)のクラスは、機能させるために再コンパイルする必要があります。したがって、クラスを異なるアセンブリに分割することは論理的に不可能です。

5
dotNET

別のdllのクラスにメソッドを追加する場合、拡張メソッドを使用できます。このメソッドの1つの欠点は、静的メソッドを追加できないことです。

5
thumbmunkeys

問題は、別のアセンブリに部分クラスを作成する理由です。アセンブリ全体で抽象クラスとインターフェースを定義できますが、それを調べる必要があるかもしれません。

3
Gleno