2009-09-18 17 views
13

私はクラス定義を配布するのは非常に危険な機能だと思っていますので、あなたが本当にそれを知っているかどうかは分かりません。たとえ3つの部分的な定義があったとしても、どこに4番目の定義がないのを知ることができますか?C# - 「部分」クラスのメリットは何ですか?

私はC#を初めて使っていますが、C++で10年を過ごしました。

とにかく、「部分的な」概念には大きなメリットがありますが、それは明らかに欠けています。私はそれの背後にある哲学についてもっと学びたいと思う。

EDIT:申し訳ありませんが、既存の投稿を検索すると迷っています。this duplicate

+0

"どこに4番目のコードがないのを知るには?" ここでの問題は部分的なクラスではなく、コンパイルしているプロジェクトの知識が不足していることです。 – mackenir

+0

http://stackoverflow.com/questions/612831/practical-usage-of-partial-keyword-in-c –

+0

@mackenir:100000以上のコードプロジェクトに割り当てられたメンテナンス開発者にその引数を渡してみてください。 – sharkin

答えて

31

部分的なクラスは、コード生成を使用するときに便利です。生成されたクラスを継承するのではなく、変更する場合は、コードを再生成するときに変更を失う危険があります。余分なメソッドなどを別のファイルに定義することができれば、生成されたクラスの部分は手作りのコードを壊さずに再作成できます。

+2

+ 1 - 実際、この非常に機能は、Visual Studioに付属のフォームビルダツールで使用されます。 – ConcernedOfTunbridgeWells

11

大きな利点は、(デザイナーによる)コンピュータ生成コードを隠すことです。
Eric Lippertには、一般的にpartial-keywordに関する最近のブログ記事があります。

ネストされたクラスに独自のファイルを与えることもできます。

3

2人が同じクラスを編集し、自動的に生成されたデザイナーコードは、部分的なクラスとメソッドによって解決された2つの即時機能です。

別々のファイルにデザイナで生成されたコードを持たせると、多くの場合、Visual Studio(Windowsフォームの場合)でコードを変更することができます。

Visual Studioでは、デザイナーファイル、コードビハインド、デザインファイルをASP.NETと同期させることができません。

+0

同じクラスを編集する2人は、部分クラスではなくバージョンコントロールを使用する必要があります。 – svinto

+0

または両方とも、1000sの行を持ついくつかの巨大なレガシークラスの場合、マージ頭痛を保存します。 –

+0

私はそれが正しい方法であることを示唆していませんが、それは部分的なクラスの背後にあるアイデアの1つでした:http://msdn.microsoft.com/en-us/library/wa80x488(VS.80).aspx –

3

他の点は、クラスが複数のインターフェイスを実装する場合、インターフェイスの実装を異なるファイルに分割できることです。

したがって、すべてのコードファイルには、インターフェイス実装に属するコードしかありません。それはによると、コンセプトの分離の概念。

2

何らかの理由で論理的に小さなクラスに分割できない、または物理的に複数のファイルに分割して、より効果的に処理することができない、何らかの種類の不条理なクラスがあるとします。本質的に、上下にスクロールすることを避けて、小さなチャンクを一度に見ることができます。

これは、おそらくいくつかの秘密のポリシーが多数の依存関係のために既存のAPIを混乱させることが許されないため、レガシーコードに当てはまるかもしれません。

必ずしも部分クラスを最大限に活用する必要はありませんが、そうでなければ変更できないコードを整理するための代替オプションが用意されています。

1

多分その遅すぎるが、私はあまりにも私の2セントを追加するためにさせてください。

* .Whenは別のファイル上のクラスを広げ、大規模なプロジェクトに取り組んでは、複数のプログラマが同時にそこで作業することができます。

*。VS.NETで生成されたクラスのコード(拡張機能用)を簡単に記述できます。これにより、システム生成コードを邪魔することなく自分の必要なコードを書くことができます

関連する問題