第1章 C#言語
項目1 アクセス可能なデータメンバの代わりに常にプロパティを使用すること
項目2 constよりもreadonlyを使用する
項目3 キャスト時にはisあるいはas演算子を使用すること
項目4 #ifの代わりにConditional属性を使用する
項目5 ToString()を常に実装すること
項目6 値型と参照型の違い
項目7 値型は不変かつアトミックにすること
項目8 値型における0を正常な状態とすること
項目9 ReferenceEquals()staticメソッドOracleEquals()、インスタンスメソッドのEquals()、等号演算子==の関係を把握する
項目10 GetHashCode()の罠に注意する
項目11 foreachループを使用すること
第2章 .NETにおけるリソース管理
項目12 割り当て演算子よりも変数初期化子を使用すること
項目13 staticメンバはstaticコンストラクタで初期化する
項目14 コンストラクタの連鎖を活用する
項目15 usingおよびtry...finallyを使用してリソースの後処理を行う
項目16 ごみの量を最小限に抑える
項目17 ボックス化、ボックス化解除を最小限に抑える
項目18 Disposeパターンの標準的な実装
第3章 C#によるソフトウェアデザインの表現
項目19 継承よりもインターフェイスの定義および実装を行うこと
項目20 インターフェイスを実装することと仮想関数をオーバーライドすることの違い
項目21 デリゲートを使用してコールバックを実現する
項目22 イベントにより発信インターフェイスを定義する
項目23 クラス内オブジェクトの参照を返さないようにすること
項目24 命令型プログラミングよりも宣言型プログラミングを選択する
項目25 型はできるだけシリアル化可能にすること
項目26 IComparableとIComparerを実装して順序関係をサポートする
項目27 ICloneableを使用しないこと
項目28 変数演算子は使用しないこと
項目29 親クラスの変更による指示がない限りnew修飾子は使用しないこと
第4章 バイナリコンポーネントを作成する
項目30 CLS互換性のあるアセンブリを作成すること
項目31 機能を最小限かつシンプルにすること
項目32 より小さく凝集したアセンブリを作成すること
項目33 型の可視性を制限すること
項目34 粒度の粗いWeb APIを作成する
第5章 フレームワークを活用する
項目35 イベントハンドラよりもオーバーライドを優先すること
項目36 .NETランタイムの診断機能を活用する
項目37 標準の設定メカニズムを使用すること
項目38 データバインドを活用およびサポートすること
項目39 .NETの検証機能を使用すること
項目40 ニーズに一致したコレクションを用意すること
項目41 独自のデータ構造よりもDataSetを利用する
項目42 リフレクションを単純化するために属性を活用する
項目43 リフレクションを使用しすぎないこと
項目44 完全にアプリケーション固有の例外クラスを作成する
第6章 その他
項目45 例外を強く保証すること
項目46 相互運用を最小限にすること
項目47 安全なコードを選ぶ
項目48 ツールとリソースについて学ぶ
項目49 C#2.0への準備
項目50 ECMA標準について学ぶ