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標準について学ぶ