Effective C#のもくじ

Chapter 1 C#言語

  • アクセス可能なデータメンバの代わりに常にプロパティを使用すること
  • constよりもreadonlyを使用する
  • キャスト時にはisあるいはas演算子を使用すること
  • #ifの代わりにConditional属性を使用する
  • ToString()を常に実装すること
  • 値型と参照型の違い
  • 値型は不変かつアトミックにすること
  • 値型における0を正常な状態とすること
  • ReferenceEquals()とstaticメソッドのEquals()、インスタンスメソッドのEquals()、等号演算子==の関係を把握する
  • GetHashCode()の罠に注意する
  • foreachループを使用すること

Chaptert 2 .NETにおけるリソース管理

  • 割り当て演算子よりも変数初期化子を使用すること
  • staticメンバはstaticコンストラクタで初期化する
  • コンストラクタの連鎖を活用する
  • usingおよびtry...finallyを使用してリソースの後処理を行う
  • ゴミの量を最小限に抑えること
  • ボックス化、ボックス化解除を最小限に抑える
  • Disposeパターンの標準的な実装

Chapter 3 C#によるソフトウェアデザインの表現

  • 継承よりもインターフェイスの定義および実装を行うこと
  • インターフェイスを実装することと仮想関数をオーバーライドすることの違い
  • デリゲートを使用してコールバックを実現する
  • イベントにより発信インターフェイスを定義する
  • クラス内オブジェクトの参照を返さないようにすること
  • 命令形プログラミングよりも宣言型プログラミングを選択する
  • 型はできるだけシリアル化可能とすること
  • IComparableとIComparerを実装して順序関係をサポートする
  • ICloneableを使用しないこと
  • 変換演算子は使用しないこと
  • 親クラスの変更による指示がない限りnew修飾子は使用しないこと

Chapter 4 バイナリコンポーネントを作成する

  • CLS互換性のあるアセンブリを作成すること
  • 機能を最小限かつシンプルにすること
  • より小さく凝集したアセンブリを作成すること
  • 型の可視性を制限すること
  • 粒度の粗いWeb APIを作成する

Chapter 5 フレームワークを活用する

  • イベントハンドラよりもオーバーライドを優先すること
  • .NETランタイムの診断機能を利用する
  • 標準の設定メカニズムを使用すること
  • データベインドを活用およびサポートすること
  • .NETの検証機能を使用すること
  • ニーズに一致したコレクションを用意すること
  • 独自のデータ構造よりもDataSetを利用する
  • リフレクションを単純化するために属性を使用する
  • リフレクションを使用しすぎないこと
  • 完全にアプリケーション固有の例外クラスを作成する

Chapter 6 その他

  • 例外を強く保証すること
  • 相互運用を最小限にすること
  • 安全なコードを選ぶ
  • ツールとリソースについて選ぶ
  • C# 2.0への準備
  • ECMA標準について学ぶ