『究極のC#プログラミング』 Chapter8 部分クラスと静的クラス

部分クラスのわかりやすい事例は、Windowsフォームの自動生成コードの分離などGUIに関わる部分。
しかし、コンソールアプリケーションでも部分クラスは用いられる。


部分クラスとは、
クラス、構造体、インターフェースの宣言を複数の固まりに分割できることで、
宣言を複数のソースファイルに分割して書ける。
partialキーワードを使う

自動生成コードと安全に共存する方法としての、部分クラス


WindowsフォームアプリケーションをVSで作成した時に、Form1.Designer.csとForm1.csというコードが生成される。
前者は、ソースコードを直接見ることなく、マウス操作だけでコードが自動生成される部分。
後者は、プログラマが自由に記述できる部分。
このように分割することで、自動生成コードを勝手に書き換えてしまうリスクを減らしつつ、
書き換えて良い部分だけ見ながら作業できるというメリットがある。

リフレクションと部分クラス


クラスを入れ物(データもメソッドも格納できるコレクション)と捉える。
このとき、格納されたデータやメソッドは、リフレクションの機能を用いて列挙できる。

部分クラスを使う上での注意点


属性
個々の部分に異なる属性をつけて区別することは出来ない。もし異なる属性をつけても、それは部分につけられるのでなく型につけられる。


アクセス修飾子
アクセス修飾子は全ての部分で同じである必要がある。
1つでもabstract, sealedが付いた部分があれば、そのクラスはそれぞれabstract, sealedになる
ただし、unsafeは、その部分クラスだけをunsafeにする


ジェネリック
ジェネリックの型パラメータは、全ての部分クラスで同一である必要がある。
型パラメータの制約(where句)も同一である必要がある。


継承
すべての部分クラスの基本クラスの指定は同一である必要がある。


基本インターフェース
個々の部分に異なるインターフェースをつけて区別することは出来ない。もし異なるインターフェースをつけても、それは部分にではなく型につけられる。


メンバー
クラス内でpartialな内部クラスを宣言することができる


名前空間
すべての部分クラスは同じ名前空間に属す必要がある

静的クラス

シングルトンパターン、ユーティリティクラス