Book description
C#を体系的に網羅したC#プログラマのバイブルが、C# 8.0に合わせて全面改訂。言語仕様からクラウドも考慮したWebアプリ開発、デスクトップアプリ構築まで、C# 8.0の基本から高度なテクニックまでを詳しく紹介します。C# 8.0では、パターンマッチング、範囲構文、非同期メソッドの大幅拡張、null許容参照をはじめさまざまな新機能の追加と改善がされています。本書はこうした新機能もしっかりとフォロー。詳細な説明と、豊富なサンプルコードを用意し、初心者はもちろん中上級者の要望にも応える一冊です。
Table of contents
- 表紙
- はじめに
- 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 まとめ
- 奥付
Product information
- Title: プログラミングC# 第8版
- Author(s):
- Release date: June 2021
- Publisher(s): O'Reilly Japan, Inc.
- ISBN: 9784873119366
You might also like
book
Rustの練習帳 ―コマンドラインツールの作成を通してRustを学ぶ
Rustは速度や安全性、並行性に優れたプログラミング言語で、ゲームエンジン、オペレーティングシステム、ブラウザなど、さまざまな分野で使われています。Rustは学習が難しい言語だと言われていますが、本書では小さなコマンドラインツールを多数書くことを通して、Rustの機能やテスト方法を素早く学ぶことができます。各章では、Rustの重要な概念を取り上げ、関連するコマンドラインツールを作成しながら学習を進めていきます。Rustの初心者から経験者まで、実際にプログラムを書きながらスキルを向上させたい人に最適な一冊です。
book
PythonによるWebスクレイピング 第2版
ネットからデータを機械的に集め、必要な情報を抽出するWebスクレイピングにより、膨大な情報の中から、検索エンジンだけでは入手できない本当に必要な情報を入手できるようになります。本書は、Webスクレイパーの基礎から、データの抽出、格納、収集後のクリーニング、さらには、JavaScript実行、Seleniumによる自動化、OCRを含めた自然言語処理、並列処理などの高度なトピックに加えて法律面の解説など、Webスクレイピングを実際に行うために必要なプログラミングテクニックと問題に遭遇した際の対処法まで幅広い内容をカバー。豊富な事例から、自分の問題に合ったツールを選択し、解決することが容易となります。Scrapy 1.6、Python 3に対応した待望の改訂版。
book
Javaパフォーマンス
本書ではJVMのチューニングとJavaプラットフォームでの問題解決の双方からJavaパフォーマンスの「アート」と「サイエンス」を明らかにします。Javaアプリケーションのテスト手法やベンチマーク測定、パフォーマンス分析に必須のモニタリングツールを学んだうえで、さまざまな性能改善について議論します。JITコンパイル、ガベージコレクションというチューニングが大きな役割を果たす2つの仕組みについて最初に考察します。続いて、Javaプラットフォームのさまざまな側面で高いパフォーマンスを発揮するためのベストプラクティスを紹介。Java 8対応。
book
Pythonではじめる教師なし学習 ―機械学習の可能性を広げるラベルなしデータの利用
教師なし学習はラベル付けされていないデータから学習する機械学習の一種です。現在の機械学習では大量のラベル付きのデータを用いる教師あり学習が主流ですが、ラベルを付けるには膨大なコストがかかります。現実世界に機械学習を適用していくためには、ラベル付けを必要としない教師なし学習の重要性が増してくると考えられます。本書は実践的な視点から、データにある隠れたパターンを特定し、異常検出や特徴量抽出・選択を行う方法を紹介します。ラベルなしデータを有効に利用することで、機械学習の可能性を各段に広げる教師なし学習の本質に迫ります。