プログラミングMicrosoft .NET Framework 第2版 目次

プログラミングMS .NET FRAMEWORK 第2版 (マイクロソフト公式解説書)

プログラミングMS .NET FRAMEWORK 第2版 (マイクロソフト公式解説書)

参考資料として目次をメモ

  • 1 CLRの実行モデル
    • 1.1 ソースコードコンパイルしてマネージモジュールにする
    • 1.2 マネージモジュールをアセンブリにまとめる
    • 1.3 共通言語ランタイムのロード
    • 1.4 アセンブリのコードの実行
      • 1.4.1 ILのコードの検証
      • 1.4.2 アンセーフコード
    • 1.5 ネイティブコード生成ツール:NGen.exe
    • 1.6 .NET Framework クラスライブラリ(FCL)
    • 1.7 共通型システム(CTS)
    • 1.8 共通言語仕様(CLS)
    • 1.9 アンマネージコードとの相互運用
  • 2 アプリケーションと型のビルド、パッケージング、配置、管理
  • 3 共有アセンブリと厳密名付きアセンブリ
  • 4 型の基礎
  • 5 単純型、参照型、値型
    • 5.1 プログラミング言語と単純型
      • 5.1.1 単純型の操作とchecked/unchecked
    • 5.2 参照型と値型
    • 5.3 値型のボックス化とボックス化解除
    • 5.4 ボックス化された値型のフィールドをインターフェイスを使って変更するには(そしてなぜそれをしない方がいいのか)
    • 5.5 オブジェクトの等値性と同一性
    • 5.6 オブジェクトのハッシュコード
  • 6 型とメンバの基礎
    • 6.1 型のメンバの種類
    • 6.2 型のアクセス修飾子
    • 6.3 メンバのアクセス修飾子
    • 6.4 staticクラス
    • 6.5 パーシャルクラス、構造体、インターフェイス
    • 6.6 コンポーネント多態性、バージョン管理
      • 6.6.1 CLRが仮想メソッド、プロパティ、イベントを呼び出す方法
      • 6.6.2 型とメンバのアクセス修飾子を賢く利用する
      • 6.6.3 型のバージョン管理と仮想メソッド
  • 7 定数とフィールド
    • 7.1 定数
    • 7.2 フィールド
  • 8 メソッド:コンストラクタ、演算子、変換とパラメータ
  • 9 プロパティ
    • 9.1 引数と取らないプロパティ
      • 9.1.1 プロパティを賢く設計する
    • 9.2 引数を取るプロパティ
    • 9.3 プロパティのアクセサメソッドを呼び出すときのパフォーマンス
    • 9.4 プロパティのアクセサのサクセス修飾子
    • 9.5 プロパティアクセサメソッドとジェネリック
  • 10 イベント
    • 10.1 イベントを公開する型の設計
    • 10.2 イベントはどのように実装されているか
    • 10.3 イベント通知を受け取る型の設計
    • 10.4 イベントとスレッドセーフティ
    • 10.5 イベントへの登録の明示的な制御
    • 10.6 たくさんのイベントを定義する型の設計
  • 11 文字、文字列、テキスト操作
    • 11.1 文字
    • 11.2 System.String型
      • 11.2.1 文字列の作成
      • 11.2.2 文字列は不変
      • 11.2.3 文字列の比較
      • 11.2.4 文字列のインターン
      • 11.2.5 文字列のプーリング
      • 11.2.6 文字列の中の文字の検証
      • 11.2.7 その他の文字列操作
    • 11.3 動的な文字列作成を効率よく行う
      • 11.3.1 StringBuilderオブジェクトの作成
      • 11.3.2 StringBuilderのメンバ
    • 11.4 オブジェクトの文字列表現を取得する
      • 11.4.1 文字列の整形とカルチャ
      • 11.4.2 複数のオブジェクトを書式指定して単一の文字列にする
      • 11.4.3 独自のフォーマッタを提供する
    • 11.5 文字列をパースしてオブジェクトを取得する
    • 11.6 エンコーディング:文字とバイトを相互変換する
    • 11.7 セキュアな文字列
  • 12 列挙型のビットフラグ
    • 12.1 列挙型
    • 12.2 ビットフラグ
  • 13 配列
    • 13.1 配列のキャスト
    • 13.2 すべての配列は暗黙のうちにSystem.Arrayから派生する
    • 13.3 すべての配列は暗黙にIEnumerable、ICollection、IListを実装する
    • 13.4 配列を引数や戻り値として利用する
    • 13.5 下限がゼロでない配列を作る
    • 13.6 配列アクセスのパフォーマンス
    • 13.7 アンセーフな配列アクセスとサイズ固定の配列
  • 14 インターフェイス
  • 15 デリゲート
    • 15.1 デリゲートの概要
    • 15.2 デリゲートを使ってstaticなコールバックメソッドを呼び出す
    • 15.3 デリゲートを使ってインスタンスコールバックメソッドを呼び出す
    • 15.4 デリゲートの謎を解く
    • 15.5 デリゲートを複数回使ってコールバックメソッドを呼び出す(チェーン化)
      • 15.5.1 デリゲートのチェーンに対するC#のサポート
      • 15.5.2 デリゲートチェーンの起動をより詳細に制御する
    • 15.6 デリゲートをサポートするC#シンタックスシュガー
    • 15.7 デリゲートとリフレクション
  • 16 ジェネリック
  • 17 カスタム属性
    • 17.1 カスタム属性を利用する
    • 17.2 独自の属性を定義する
    • 17.3 属性のコンストラクタとフィールド/プロパティのデータ型
    • 17.4 カスタム属性の利用を検出する
    • 17.5 2つの属性のインスタンスを一致させる
    • 17.6 Attributeから派生したクラスのオブジェクトを作らずにカスタム属性の利用を検出する
    • 17.7 条件付き属性クラス
  • 18 null許容型
    • 18.1 null許容型に対するC#のサポート
    • 18.2 C#のnull合体演算子
    • 18.3 CLRのnull許容型に対する特別なサポート
      • 18.3.1 nullを許容する値型のボックス化
      • 18.3.2 nullを許容する値型のボックス化解除
      • 18.3.3 nullを許容する値型を使ってGetTypeを呼び出す
      • 18.3.4 nullを許容する値型を使ってインターフェイスメソッドを呼び出す
  • 19 例外
    • 19.1 例外処理の進化
    • 19.2 例外処理のメカニズム
      • 19.2.1 tryブロック
      • 19.2.2 catchブロック
      • 19.2.3 finallyブロック
    • 19.3 CLS準拠の例外と非準拠の例外
    • 19.4 例外の厳密な定義
    • 19.5 System.Exceptionクラス
    • 19.6 FCLに定義されている例外クラス
    • 19.7 例外をスローする
    • 19.8 独自の例外クラスの定義
    • 19.9 例外の適切な使い方
      • 19.9.1 メソッドの実引数を検証する
      • 19.9.2 finallyブロックをたくさん使う
  • 20 自動メモリ管理(ガーベジコレクション)
    • 20.1 ガーベジコレクションプラットフォームの基礎知識
      • 20.1.1 マネージヒープでリソースを確保する
    • 20.2 ガーベジコレクションアルゴリズム
    • 20.3 ガーベジコレクションデバッグ
    • 20.4 ネイティブリソースを解放するためにファイナライゼーションを使う
      • 20.4.1 CriticalFinalizerObjectを使った保障つきのファイナライゼーション
      • 20.4.2 SafeHandleとその派生型
      • 20.4.3 SafeHandle型を使ってアンマネージコードと相互連携する
    • 20.5 マネージリソースでファイナライゼーションを利用する
    • 20.6 Finalizeメソッドが呼び出されるタイミング
    • 20.7 ファイナライゼーションの詳細
    • 20.8 Disposeパターン:オブジェクトのクリーンアップを強制する
    • 20.9 Disposeパターンを実装する型の利用
    • 20.10 C#のusingステートメント
    • 20.11 依存関係からくる興味深い問題
    • 20.12 オブジェクトの寿命を手動で監視または制御する
    • 20.13 復活
    • 20.14 ジェネレーション
    • 20.15 ネイティブリソースと共に使うその他のガーベジコレクションの機能
    • 20.16 メモリを大量に必要とする処理の成功を予測する
    • 20.17 プログラムによるガーベジコレクタの制御
    • 20.18 その他のガーベジコレクタのパフォーマンス上の注意
    • 20.19 ガーベジコレクションの監視
  • 21 CLRホスティングとAppDomain
    • 21.1 CLRホスティング
    • 21.2 AppDomain(アプリケーションドメイン)
      • 21.2.1 AppDomain境界を越えてオブジェクトにアクセスする
    • 21.3 AppDomainのアンロード
    • 21.4 ホストでAppDomainを利用する
    • 21.5 高度なホストの制御
      • 21.5.1 マネージコードを使ってCLRを管理する
      • 21.5.2 堅牢なホストアプリケーションを記述する
      • 21.5.3 ホストでスレッドを取り戻す
  • 22 アセンブリのロードとリフレクション
    • 22.1 アセンブリを明示的にロードする
    • 22.2 リフレクションを使って動的に拡張できるアプリケーションを開発する
    • 22.3 リフレクションのパフォーマンス
      • 22.3.1 アセンブリに定義されている型を発見する
      • 22.3.2 型オブジェクトの実体
      • 22.3.3 Exceptionから派生した型の階層構造を表示する
      • 22.3.4 型のインスタンスの作成
    • 22.4 アドインをサポートするアプリケーションの設計
    • 22.5 リフレクションで型のメンバを発見する
      • 22.5.1 型のメンバを発見する
      • 22.5.2 BindingFlags:返されるメンバの種類を絞り込む
      • 22.5.3 型が実装するインターフェイスを発見する
      • 22.5.4 型のメンバを実行する
      • 22.5.5 一度のバインドで何度も起動する
      • 22.5.6 バインディングハンドルを使ってワーキングセットのサイズを減らす
  • 23 非同期処理
    • 23.1 CLRWindowsのスレッドを利用する方法
    • 23.2 効率的なスレッドの使い方(偉そうに)
    • 23.3 CLRのスレッドプールとは
    • 23.4 スレッドプールのスレッドの数を制限する
    • 23.5 スレッドプールを使って非同期の計算処理を行う
    • 23.6 非同期の計算処理を専用のスレッドで行う
    • 23.7 非同期の計算処理を定期的に行う
      • 23.7.1 3つのタイマーの物語
    • 23.8 非同期プログラミングモデルの紹介
    • 23.9 APMを使って非同期にI/O操作を行う
    • 23.10 APMの3つの終了待機テクニック
      • 23.10.1 APMの完了まで待つテクニック
      • 23.10.2 APMのポーリングによる終了待機テクニック
      • 23.10.3 APMのメソッドコールバックによる終了待機テクニック
    • 23.11 APMを利用して非同期の計算処理を行う
    • 23.12 APMと例外
    • 23.13 APMに関する注意事項
    • 23.14 実行コンテキスト
  • 24 スレッドの同期
    • 24.1 メモリの一貫性、揮発的なメモリアクセス、揮発的フィールド
      • 24.1.1 揮発性の読み取りと書き込み
      • 24.1.2 C#での揮発性フィールドのサポート
    • 24.2 相互ロックのメソッド
    • 24.3 Monitorクラスと同期ブロック
      • 24.3.1 「すばらしい」アイデア
      • 24.3.2 「すばらしい」アイデアを実装する
      • 24.3.3 Monitorクラスを使って同期ブロックを操作する
      • 24.3.4 Microsoftの考えどおりに同期する
      • 24.3.5 C#のlockステートメントでコードを単純化する
      • 24.3.6 Microsoftの考えどおりにstaticメンバへのアクセスを同期する
      • 24.3.7 「すばらしい」アイデアが実はすばらしくない理由
      • 24.3.8 ロックのための有名な二重チェックテクニック
    • 24.4 ReadWriterLockクラス
    • 24.5 マネージコードでWindowsカーネルオブジェクトを使う
      • 24.5.1 1つのカーネルオブジェクトがシグナル状態になったときにメソッドを呼び出す