#Effective C# 4.0のもくじ
Chapter 1 イディオム
- アクセス可能なデータメンバの代わりに常にプロパティを使用すること
- constよりもreadonlyを使用する
- キャスト時にはisあるいはas演算子を使用すること
- #ifの代わりにConditional属性を使用する
- ToString()を常に実装すること
- さまざまな同値性メソッドの関係を把握する
- GetHashCode()の罠に注意する
- ループの代わりにクエリ構文を使用すること
- 独自のAPIでは変換演算子を定義しないこと
- メソッドのオーバーロードを最小限にするよう、オプション引数を使用する
- 機能を最小限かつシンプルにすること
Chapter 2 リソース管理
- 割り当て演算子よりもメンバ初期化子を使用すること
- staticメンバは適切に初期化する
- 初期化ロジックの重複を最小化する
- usingおよびtry...finallyを使用してリソースの後処理を行う
- 不必要なオブジェクトの生成を避けること
- Disposeパターンの標準的な実装
- 値型と参照型の違い
- 値型における0を正常な状態とすること
- 値型は不変かつアトミックにすること
Chapter 3 デザインの表現
- 型の可視性を制限すること
- 継承よりもインターフェイスの定義および実装を行うこと
- インターフェイスメソッドとかそうメソッドの違いを理解する
- デリゲートを使用してコールバックを実現する
- イベントパターンの実装により通知を行うこと
- クラス内オブジェクトの参照を返さないようにすること
- 型はできるだけシリアル化可能にすること
- 粒度の粗いインターネットサービスAPIを作成する
- ジェネリックの共変性と半変性をサポートする
Chapter 4 フレームワークの活用
- イベントハンドラよりもオーバーライドを優先すること
- IComparable
とIComparer を実装して順序関係をサポートする - ICloneableを使用しないこと
- 親クラスの変更に応じる場合のみnew修飾子を使用すること
- 基本クラスに定義されたメソッドをオーバーロードしないこと
- PLINQが並列アルゴリズムを実装する方法
- I/Oのコストが高い処理に対してPLINQを使用する方法
- 例外を考慮した並列アルゴリズムを構成すること
Chapter 5 動的プログラミング
- dynamicの利点と欠点を把握する
- ジェネリック型引数の実行時型を活用するためにdynamicを使用する
- 匿名型を引数にとれるようdynamicを使用する
- DynamicObjectあるいはIDynamicMetaObjectProviderを使用してデータ駆動のdynamic型を作成する
- Expression APIを活用する方法を把握する
- 式を利用して事前バインディングを遅延バインディングに切り替える
- 公開するAPIでは動的オブジェクトを最小限に抑えること
Chapter 6 その他
- ボックス化、ボックス化解除を最小限に抑える
- 完全にアプリケーション固有の例外クラスを作成する
- 例外を強く保証すること
- 安全なコードを採用すること
- CLS互換性のあるアセンブリを作成すること
- より小さく凝集したアセンブリを作成すること