==Effective C# 4.0==
[[C#][Visual Studio][言語まとめ C#]]
{{amazon|4798122513}}
===イディオム===
}
*プロパティの自動実装構文と同じ構文を使用して、抽象クラスやインターフェースのメンバープロパティを実装出来る
public interface IHoge<<T>>
{
T Value
}
}
<<blockquote>>型が持つデータをpublicまたはprotectedとして公開する場合、常にプロパティを使用するべき。一連のデータやディクショナリを含む場合、インデクサを定義する。<</blockquote>>
====constよりもreadonlyを利用する====
// コンパイル時定数指定不可
public static DateTime BirthDay = new DateTime(1971, 9, 30);
<<blockquote>>コンパイル時に値が決まっていなければならない場合は、const利用必須だが、まれなケース。リリースを重ねても値が不変である必要がある。そうでなければ、readonly を利用し、柔軟な処理を行えるようにすべき<</blockquote>>
====キャスト時にはisあるいはas演算子を使用すること====
*ダウンキャストには2つの方法がある
**C言語以来のキャストを利用する
*できる限りasを利用するのが最良の選択
<<blockquote>>as 演算子はキャスト操作とよく似ています。 ただし、変換可能でない場合、as は、例外は発生せず、null を返します。<</blockquote>>
object o = GetObject();
*互いのクラス間でデータをやり取りする必要があるが、互いのインターフェースを使用するほどには密に連携させたくない場合最善の選択肢
*対象を実行時に決定でき、複数の相手に同時に通知できる
<<blockquote>>デリゲートとはメソッドへの参照を含んだオブジェクト<</blockquote>>
*C#にはデリゲートを表現するためのラムダ式形式の構文が用意されている
*Predicate<<T>>,Action<><>,Func<> <> など一般的なデリゲート形式が数多く用意されている
====イベントパターンの実装により通知を行うこと====
====クラス内オブジェクトの参照を返さないようにすること====
===フレームワークの活用===
====イベントハンドラよりもオーバーライドを優先すること====
====IComparable<<T>>とICompare<<T>>を実装して順序関係をサポートする====
====ICloneableを使用しないこと====
====親クラスの変更に応じる場合のみnew修飾子を使用すること====