プログラミングC# 第8版

[cover photo]
TOPICS
Programming , C#
発行年月日
PRINT LENGTH
800
ISBN
978-4-87311-936-6
原書
Programming C# 8.0
FORMAT
Print PDF EPUB
Ebook
5,280円
Ebookを購入する
Print
5,280円

C#を体系的に網羅したC#プログラマのバイブルが、C# 8.0に合わせて全面改訂。言語仕様からクラウドも考慮したWebアプリ開発、デスクトップアプリ構築まで、C# 8.0の基本から高度なテクニックまでを詳しく紹介します。C# 8.0では、パターンマッチング、範囲構文、非同期メソッドの大幅拡張、null許容参照をはじめさまざまな新機能の追加と改善がされています。本書はこうした新機能もしっかりとフォロー。詳細な説明と、豊富なサンプルコードを用意し、初心者はもちろん中上級者の要望にも応える一冊です。

目次

目次
はじめに

1章 C#の基礎
    1.1 なぜC#なのか
    1.2 C#の主な特徴
        1.2.1 マネージコードとCLR
        1.2.2 専用よりも汎用を
    1.3 C#標準と実装
        1.3.1 多数のMicrosoft .NET(一時的なものとして)
        1.3.2 .NET Standardによる複数の.NETバージョンへの対応
    1.4 Visual StudioとVisual Studio Code
    1.5 簡単なプログラムの分析
        1.5.1 既存のソリューションへのプロジェクトの追加
        1.5.2 他からのプロジェクトの参照
        1.5.3 外部ライブラリの参照
        1.5.4 単体テストの記述
        1.5.5 名前空間
        1.5.6 クラス
        1.5.7 プログラムエントリポイント
        1.5.8 単体テスト
    1.6 まとめ

2章 C#の基本的なコーディング
    2.1 ローカル変数
        2.1.1 スコープ
    2.2 ステートメントと式
        2.2.1 ステートメント
        2.2.2 式
    2.3 コメントと空白文字
    2.4 プリプロセッサディレクティブ
        2.4.1 コンパイルシンボル
        2.4.2 #errorディレクティブと#warningディレクティブ
        2.4.3 #lineディレクティブ
        2.4.4 #pragmaディレクティブ
        2.4.5 #nullableディレクティブ
        2.4.6 #regionディレクティブと#endregionディレクティブ
    2.5 基本的なデータ型
        2.5.1 数値型
        2.5.2 ブール型
        2.5.3 文字列と文字
        2.5.4 タプル
        2.5.5 dynamic型
        2.5.6 オブジェクト
    2.6 演算子
    2.7 フロー制御
        2.7.1 ifステートメントにおける真偽の決定
        2.7.2 switchステートメントを使った複数選択
        2.7.3 ループ:whileとdo
        2.7.4 C言語風のforループ
        2.7.5 foreachループによるコレクションの繰り返し処理
    2.8 パターン
        2.8.1 whenを使ってさらに限定する
        2.8.2 式におけるパターン
    2.9 まとめ

3章 型
    3.1 クラス
        3.1.1 静的メンバ
        3.1.2 静的クラス
        3.1.3 参照型
    3.2 構造体(Struct)
        3.2.1 値型を作るべき場合
        3.2.2 不変性の保証
    3.3 メンバ
        3.3.1 フィールド
        3.3.2 コンストラクタ
        3.3.3 デコンストラクタ
        3.3.4 メソッド
        3.3.5 プロパティ
        3.3.6 インデクサ
        3.3.7 初期化子構文
        3.3.8 演算子
        3.3.9 イベント
        3.3.10 ネストされた型
    3.4 インターフェイス
        3.4.1 デフォルトインターフェイス実装
    3.5 列挙型(enum)
    3.6 その他の型
        3.6.1 匿名型
    3.7 部分型とメソッド
    3.8 まとめ

4章 ジェネリック型
    4.1 ジェネリック型
    4.2 制約
        4.2.1 型制約
        4.2.2 参照型制約
        4.2.3 値型制約
        4.2.4 アンマネージ制約のある値型
        4.2.5 Not Null制約
        4.2.6 その他の特別な値制約
        4.2.7 複数の制約
    4.3 ゼロ系の値
    4.4 ジェネリックメソッド
        4.4.1 型推論
    4.5 ジェネリックとタプル
    4.6 ジェネリックの詳細
    4.7 まとめ

5章 コレクション
    5.1 配列
        5.1.1 配列初期化
        5.1.2 検索とソート
        5.1.3 多次元配列
        5.1.4 コピーとサイズ変更
    5.2 List<T> 
    5.3 リストインターフェイスとシーケンスインターフェイス
    5.4 リストとシーケンスの実装
        5.4.1 イテレータを使ったIEnumerable<T>の実装
        5.4.2 Collection<T> 
        5.4.3 ReadOnlyCollection<T> 
    5.5 インデックスと範囲構文を使った要素の指定
        5.5.1 System.Index
        5.5.2 System.Range
        5.5.3 独自の型におけるIndexやRangeのサポート
    5.6 ディクショナリ
        5.6.1 ソート済みディクショナリ
    5.7 集合
    5.8 キューとスタック
    5.9 リンクリスト
    5.10 並列コレクション
    5.11 不変コレクション
        5.11.1 ImmutableArray<T> 
    5.12 まとめ

6章 継承
    6.1 継承と型変換
    6.2 インターフェイス継承
    6.3 ジェネリック
        6.3.1 共変性と反変性
    6.4 System.Object
        6.4.1 すべてのクラスで利用可能なSystem.Objectのメソッド
    6.5 アクセシビリティと継承
    6.6 仮想メソッド
        6.6.1 抽象メソッド
        6.6.2 継承とライブラリのバージョン管理
    6.7 シールメソッドとシールクラス
    6.8 基底メンバへのアクセス
    6.9 継承とインスタンスの構築
    6.10 特別な基底型
    6.11 まとめ

7章 オブジェクトの生存期間
    7.1 ガベージコレクション
        7.1.1 到達可能性の決定
        7.1.2 誤ってガベージコレクタを無駄にする
        7.1.3 弱参照
        7.1.4 メモリの回収
        7.1.5 ガベージコレクタモード
        7.1.6 ガベージコレクションの一時停止
        7.1.7 誤ってコンパクションを無駄にする
        7.1.8 ガベージコレクションの強制実行
    7.2 デストラクタとファイナライゼーション
    7.3 IDisposable
        7.3.1 破棄を省略できる場合
    7.4 ボックス化
        7.4.1 Nullable<T>のボックス化
    7.5 まとめ

8章 例外
    8.1 例外の発生源
        8.1.1 APIからの例外
        8.1.2 ランタイムが検出する失敗
    8.2 例外処理
        8.2.1 例外オブジェクト
        8.2.2 複数のcatchブロック
        8.2.3 例外フィルタ
        8.2.4 tryブロックのネスト
        8.2.5 finallyブロック
    8.3 例外のスロー
        8.3.1 例外の再スロー
        8.3.2 素早く失敗させる
    8.4 例外型
        8.4.1 独自に定義した例外
    8.5 未処理例外
    8.6 まとめ

9章 デリゲート、ラムダ、イベント
    9.1 デリゲート型
        9.1.1 デリゲートの生成
        9.1.2 マルチキャストデリゲート
        9.1.3 デリゲートの呼び出し
        9.1.4 一般的なデリゲート型
        9.1.5 型互換性
        9.1.6 構文の裏側
    9.2 匿名関数
        9.2.1 キャプチャされた変数
        9.2.2 ラムダと式ツリー
    9.3 イベント
        9.3.1 標準的なイベントデリゲートパターン
        9.3.2 追加と削除を行うメソッドのカスタマイズ
        9.3.3 イベントとガベージコレクタ
        9.3.4 イベント対デリゲート
    9.4 デリゲート対インターフェイス
    9.5 まとめ

10章 LINQ
    10.1 クエリ式
        10.1.1 クエリ式はどのように展開されるか
        10.1.2 クエリ式のサポート
    10.2 遅延評価
    10.3 LINQ、ジェネリック、IQueryable<T> 
    10.4 標準LINQ演算子
        10.4.1 フィルタリング
        10.4.2 Select
        10.4.3 SelectMany
        10.4.4 並べ替え
        10.4.5 要素の存在チェック
        10.4.6 特定の項目と部分範囲
        10.4.7 集約
        10.4.8 集合演算
        10.4.9 シーケンス全体に対する順序を維持する演算子
        10.4.10 グループ化
        10.4.11 結合
        10.4.12 変換
    10.5 シーケンスの生成
    10.6 他のLINQ実装
        10.6.1 Entity Framework
        10.6.2 Parallel LINQ(PLINQ)
        10.6.3 LINQ to XML
        10.6.4 Reactive Extensions
        10.6.5 Tx(LINQ to Logs and Traces)
    10.7 まとめ

11章 Rx(Reactive Extensions)
    11.1 基本的なインターフェイス
        11.1.1 IObserver<T> 
        11.1.2 IObservable<T> 
    11.2 デリゲートを使った発行とサブスクライブ
        11.2.1 デリゲートを使ったオブザーバブルソースの作成
        11.2.2 デリゲートを使ったオブザーバブルソースのサブスクライブ
    11.3 シーケンスビルダ
        11.3.1 Empty
        11.3.2 Never
        11.3.3 Return
        11.3.4 Throw
        11.3.5 Range
        11.3.6 Repeat
        11.3.7 Generate
    11.4 LINQクエリ
        11.4.1 グループ化演算子
        11.4.2 結合演算子
        11.4.3 SelectMany演算子
        11.4.4 集約演算子と単一値を返すその他の演算子
        11.4.5 Concat演算子
    11.5 Rxクエリ演算子
        11.5.1 Merge
        11.5.2 ウィンドウ化演算子
        11.5.3 Scan演算子
        11.5.4 Amb演算子
        11.5.5 DistinctUntilChanged
    11.6 スケジューラ
        11.6.1 スケジューラの指定
        11.6.2 組み込みスケジューラ
    11.7 サブジェクト
        11.7.1 Subject<T> 
        11.7.2 BehaviorSubject<T> 
        11.7.3 ReplaySubject<T> 
        11.7.4 AsyncSubject<T> 
    11.8 変換
        11.8.1 IEnumerable<T>とIAsyncEnumerable<T> 
        11.8.2 .NETイベント
        11.8.3 非同期API
    11.9 時間を考慮した演算子
        11.9.1 Interval
        11.9.2 Timer
        11.9.3 Timestamp
        11.9.4 TimeInterval
        11.9.5 Throttle
        11.9.6 Sample
        11.9.7 Timeout
        11.9.8 ウィンドウ化演算子
        11.9.9 Delay
        11.9.10 DelaySubscription
    11.10 まとめ

12章 アセンブリ
    12.1 アセンブリの構造
        12.1.1 .NETメタデータ
        12.1.2 リソース
        12.1.3 複数ファイルのアセンブリ
        12.1.4 PEのその他の特性
    12.2 型の識別
    12.3 アセンブリのロード
        12.3.1 アセンブリ解決
        12.3.2 明示的なロード
        12.3.3 AssemblyLoadContextを使った分離とプラグイン
    12.4 アセンブリ名
        12.4.1 厳密名
        12.4.2 バージョン
        12.4.3 カルチャ
    12.5 保護
    12.6 まとめ

13章 リフレクション
    13.1 リフレクション型
        13.1.1 アセンブリ
        13.1.2 モジュール
        13.1.3 MemberInfo
        13.1.4 TypeとTypeInfo
        13.1.5 MethodBase、ConstructorInfo、MethodInfo
        13.1.6 ParameterInfo
        13.1.7 FieldInfo
        13.1.8 PropertyInfo
        13.1.9 EventInfo
    13.2 リフレクションコンテキスト
    13.3 まとめ

14章 属性
    14.1 属性の適用
        14.1.1 属性ターゲット
        14.1.2 コンパイラが取り扱う属性
        14.1.3 CLRが取り扱う属性
    14.2 属性の定義と利用
        14.2.1 属性型
        14.2.2 属性の取得
    14.3 まとめ

15章 ファイルとストリーム
    15.1 Streamクラス
        15.1.1 位置とシーク
        15.1.2 フラッシュ
        15.1.3 コピー
        15.1.4 データ長
        15.1.5 破棄
        15.1.6 非同期操作
        15.1.7 具象ストリーム型
        15.1.8 1つの型、多くの振る舞い
    15.2 テキスト用の型
        15.2.1 TextReaderとTextWriter
        15.2.2 具象リーダー型およびライター型
        15.2.3 エンコーディング
    15.3 ファイルとディレクトリ
        15.3.1 FileStreamクラス
        15.3.2 Fileクラス
        15.3.3 Directoryクラス
        15.3.4 Pathクラス
        15.3.5 FileInfo、DirectoryInfo、FileSystemInfo
        15.3.6 既知のフォルダ
    15.4 シリアル化
        15.4.1 BinaryReader、BinaryWriter、BinaryPrimitives
        15.4.2 CLRシリアル化
        15.4.3 JSON.NET
    15.5 まとめ

16章 マルチスレッド
    16.1 スレッド
        16.1.1 スレッド、変数、共有状態
        16.1.2 Threadクラス
        16.1.3 スレッドプール
        16.1.4 スレッドアフィニティとSynchronizationContext
    16.2 同期
        16.2.1 Monitorクラスとキーワードlock
        16.2.2 SpinLock
        16.2.3 読み取り/書き込みロック
        16.2.4 イベントオブジェクト
        16.2.5 Barrier
        16.2.6 CountdownEvent
        16.2.7 セマフォ
        16.2.8 Mutex
        16.2.9 Interlocked
        16.2.10 遅延初期化
        16.2.11 並列処理をサポートするクラスライブラリのその他のクラス
    16.3 タスク
        16.3.1 TaskクラスとTask<T>クラス
        16.3.2 継続
        16.3.3 スケジューラ
        16.3.4 エラー処理
        16.3.5 スレッド不要の独自定義タスク
        16.3.6 親子関係
        16.3.7 複合タスク
    16.4 その他の非同期パターン
    16.5 キャンセル
    16.6 並列性
        16.6.1 Parallelクラス
        16.6.2 Parallel LINQ
        16.6.3 TPLデータフロー
    16.7 まとめ

17章 非同期言語機能
    17.1 非同期機能のキーワード:asyncとawait
        17.1.1 実行コンテキストと同期コンテキスト
        17.1.2 複数の操作およびループ
        17.1.3 Taskを返す
        17.1.4 ネストされたメソッドへのasyncの指定
    17.2 awaitパターン
    17.3 エラー処理
        17.3.1 引数の検証
        17.3.2 単一の例外と複数の例外
        17.3.3 並列操作と例外の消失
    17.4 まとめ

18章 メモリ効率
    18.1 コピー(もしくはコピーしない)
    18.2 Span<T>を使った連続要素の表現
        18.2.1 ユーティリティメソッド
        18.2.2 スタック専用
    18.3 Memory<T>を使った連続要素の表現
    18.4 ReadOnlySequence<T> 
    18.5 パイプラインを使ったデータストリームの処理
        18.5.1 ASP.NET CoreにおけるJSONの処理
    18.6 まとめ

索引