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

[cover photo]
  • 2011年11月 発行
  • 816ページ
  • ISBN978-4-87311-517-7
  • フォーマット PDF
  • 原書: Programming C# 4.0, 6th Edition


C# 4.0対応とVisual Studioの新バージョンのリリースに合わせて全面改訂されたロングセラーの第6版。並行性、動的言語サポート、共変性と反変性など4.0の新機能についての解説が大幅に加筆されています。C#の構文、クラスとオブジェクト、継承とポリモーフィズム、演算子のオーバーロード、構造体、インターフェイス、配列とインデクサ、コレクション、文字列操作と正規表現、例外処理、Windowsフォームの作成など、言語仕様から応用にいたるまで、必要な情報がすべてこの1冊に凝縮されています。C#を体系的に網羅したC#プログラマのバイブル待望の改訂版です。

関連書籍

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

前書き

1章    C#言語の基礎
    1.1 なぜC#? なぜ.NET?
    1.2 .NET Frameworkクラスライブラリ
    1.3 言語スタイル
        1.3.1 結合可能性
        1.3.2 マネージコード
        1.3.3 連続性とWindows体制
    1.4 C# 4.0と.NET 4とVisual Studio 2010
    1.5 まとめ

2章    基本的なプログラミングテクニック
    2.1 はじめに
    2.2 名前空間と型
    2.3 プロジェクトとソリューション
    2.4 コメントとリージョンと可読性
        2.4.1 不適切なコメント
        2.4.2 XMLドキュメントコメント
    2.5 変数
        2.5.1 変数の型
    2.6 式およびステートメント
        2.6.1 割り当てのステートメント
        2.6.2 インクリメント、デクリメント演算子
    2.7 選択ステートメントによるフロー制御
        2.7.1 ifステートメント
        2.7.2 switchおよびcaseステートメント
    2.8 繰り返しステートメント
        2.8.1 foreachステートメント
        2.8.2 forステートメント
        2.8.3 whileおよびdoステートメント
        2.8.4 ループの終了
    2.9 メソッド
    2.10 まとめ

3章    クラスと構造体によるアイデアの抽象化
    3.1 分割統治
        3.1.1 メソッドによる概念の抽象化
        3.1.2 オブジェクトとクラスによる概念の抽象化
    3.2 クラスの定義
        3.2.1 状態をプロパティとして表現する
        3.2.2 保護レベル
        3.2.3 コンストラクタによる初期化
        3.2.4 フィールド:データを配置する場所
        3.2.5 フィールドは可変、定数は永遠
        3.2.6 読み取り専用フィールドとプロパティ
    3.3 列挙型として関連を持つ定数
    3.4 値型と参照型
    3.5 モーツァルトさん、コンストラクタが多すぎます
    3.6 オーバーロード
        3.6.1 オーバーロードされたメソッドと名前付き引数、省略可能な引数
    3.7 オブジェクト初期化子
    3.8 メソッドの定義
        3.8.1 staticメソッドの宣言
    3.9 staticフィールドとプロパティ
        3.9.1 staticコンストラクタ
    3.10 まとめ

4章    拡張性とポリモーフィズム
    4.1 コンポジションおよび集約によるアソシエーション
    4.2 継承とポリモーフィズム
    4.3 派生クラスにおけるメソッドの置き換え
        4.3.1 基底クラスのメンバをnewで隠す
        4.3.2 virtualとoverrideでメソッドを置き換える
    4.4 継承と保護
    4.5 基底クラスのメソッドの呼び出し
    4.6 ここまではよいが越えてはならぬ:sealed
    4.7 abstractによるオーバーライドの要求
    4.8 すべての型はObjectの派生である
        4.8.1 値型のボックス化とボックス化解除
    4.9 C#は複数クラスからの継承による実装をサポートしない
    4.10 C#は複数のインタフェースの実装をポートしている
    4.11 他のインタフェースから派生したインタフェース
        4.11.1 明示的なインタフェースの実装
    4.12 最後の手段:実行時に型を確認する
    4.13 まとめ

5章    デリゲートによる結合性と拡張性の向上
    5.1 デリゲートによる関数合成
    5.2 Action<T>によるジェネリックアクション
    5.3 Predicate<T>を使ったジェネリックPredicate
    5.4 匿名メソッドの使用
    5.5 ラムダ式によるデリゲートの作成
    5.6 プロパティとしてのデリゲート
    5.7 関数用のジェネリックデリゲート
    5.8 イベントによるクライアントへの通知
        5.8.1 多数のイベントを公開する
    5.9 まとめ

6章    エラー処理
    6.1 いつどのように失敗するか
    6.2 エラー値を返す
        6.2.1 返り値によるデバッグ
    6.3 例外
        6.3.1 例外処理
        6.3.2 finallyブロックはいつ実行される?
        6.3.3 キャッチすべきものを判断する
        6.3.4 カスタム例外
    6.4 まとめ

7章    配列とリスト
    7.1 配列
        7.1.1 作成と初期化
        7.1.2 カスタム型の配列
        7.1.3 配列のメンバ
        7.1.4 配列のサイズ
    7.2 List<T>
        7.2.1 独自のインデクサ
        7.2.2 検索とソート
    7.3 コレクションとポリモーフィズム
        7.3.1 独自のIEnumerable<T>の作成
    7.4 まとめ

8章    LINQ
    8.1 クエリ式
        8.1.1 クエリ式とメソッド呼び出しの比較
        8.1.2 拡張メソッドとLINQ
        8.1.3 let句
    8.2 LINQの概念およびテクニック
        8.2.1 デリゲートおよびラムダ式
        8.2.2 関数型スタイルと合成
        8.2.3 遅延実行
    8.3 LINQ演算子
        8.3.1 フィルタ処理
        8.3.2 並び替え
        8.3.3 連結
        8.3.4 グループ化
        8.3.5 射影
        8.3.6 マージ
        8.3.7 選択
        8.3.8 コレクション全体をテストする
        8.3.9 集約
        8.3.10 集合演算子
        8.3.11 連結
        8.3.12 変換
    8.4 まとめ

9章    コレクションクラス
    9.1 ディクショナリ
        9.1.1 一般的なディクショナリの用途
        9.1.2 IDictionary<TKey,TValue>
        9.1.3 ディクショナリとLINQ
    9.2 HashSetとSortedSet
    9.3 キュー
    9.4 リンクリスト
    9.5 スタック
    9.6 まとめ

10章    文字列
    10.1 文字列とは?
    10.2 文字列とChar型
    10.3 リテラル文字列とchar
        10.3.1 特定文字のエスケープ
    10.4 出力用にデータの書式を設定する
        10.4.1 標準数値書式文字列
        10.4.2 カスタム数値書式文字列
        10.4.3 日付と時間
        10.4.4 反対の方向:文字列を他の型に変換する
        10.4.5 String.Formatによる複合書式設定
    10.5 文化ごとの対応
        10.5.1 書式指定ルールの詳細
    10.6 インデックスによる文字へのアクセス
    10.7 文字列は不変
    10.8 範囲内の文字を取得する
    10.9 文字列の組み立て
        10.9.1 再びバラバラにする
        10.9.2 大文字と小文字
    10.10 テキスト操作
        10.10.1 StringBuilderによる変更可能な文字列
    10.11 検索と置換
    10.12 あらゆる種類の「空」文字列
    10.13 空白の削除
    10.14 文字種別のチェック
    10.15 文字のエンコード
        10.15.1 なぜエンコードが問題になるのか
        10.15.2 エンコードとデコード
        10.15.3 文字列をバイトで表現する理由は?
    10.16 まとめ

11章    ファイルおよびストリーム
    11.1 ディレクトリとファイルの調査
    11.2 ディレクトリの調査
    11.3 ファイルパスの操作
        11.3.1 パスと現在の作業ディレクトリ
    11.4 ファイル情報の調査
    11.5 一時ファイルの生成
    11.6 ファイルの削除
    11.7 特殊フォルダ
    11.8 パス要素を安全に連結する
    11.9 ディレクトリ階層の作成と安全性
    11.10 ディレクトリの削除
    11.11 テキストファイルの書き込み
        11.11.1 テキストファイル全体を一度に書き込む
        11.11.2 StreamWriterによるテキストの書き込み
    11.12 ファイルが破損する場面:例外の処理
        11.12.1 権限の検索と変更
    11.13 ファイルをメモリに読み込む
    11.14 ストリーム
        11.14.1 ストリーム内を移動する
        11.14.2 ストリームにデータを書き込む
    11.15 ファイルの読み取り、書き込み、ロック
    11.16 FileStreamコンストラクタ
        11.16.1 ストリームバッファ
        11.16.2 FileStream生成時にアクセス権限を設定する
        11.16.3 高度なオプションの設定
    11.17 非同期ファイル操作
    11.18 分離ストレージ
        11.18.1 ストア
        11.18.2 テキストの読み取りと書き込み
        11.18.3 「分離」の定義
        11.18.4 クォータによるユーザストレージの管理
        11.18.5 分離ストレージの管理
    11.19 ファイルではないストリーム
        11.19.1 適応ストリーム:CryptoStream
        11.19.2 メモリの中で完結する:MemoryStream
        11.19.3 バイナリをBase64エンコーディングによりテキストとして表現する
    11.20 まとめ

12章    XML
    12.1 XMLの基本(簡単な概要)
        12.1.1 要素
        12.1.2 XHTML
    12.2 XはeXtensible(拡張性)のX
    12.3 XML文書の作成
        12.3.1 XML要素
        12.3.2 XML属性
        12.3.3 LINQ to XMLとLINQをリンクさせる
    12.4 LINQによるXMLの検索
        12.4.1 単一のノードの検索
        12.4.2 検索軸
        12.4.3 where句
    12.5 XMLシリアル化
        12.5.1 属性を使用してXMLシリアル化をカスタマイズする
    12.6 まとめ

13章    ネットワーク処理
    13.1 ネットワーク処理のためのテクノロジーを選択する
        13.1.1 クライアントサイドのコードを含んだWebアプリケーション
        13.1.2 .NETクライアントと.NETサーバ
        13.1.3 .NET製のクライアントとサードパーティ製のWebサービス
        13.1.4 サードパーティ製のクライアントと.NET製のサービス
    13.2 WCF
        13.2.1 WCFプロジェクトの作成
        13.2.2 WCFのコントラクト
        13.2.3 WCFのテストクライアントおよびテストサーバ
        13.2.4 WCFサービスのホスト
        13.2.5 WCFクライアントの作成
        13.2.6 双方向コントラクトによる双方向通信
    13.3 HTTP
        13.3.1 WebClient
        13.3.2 WebRequestとWebResponse
    13.4 ソケット
        13.4.1 IPとIPv6、TCP
        13.4.2 Socketクラスを使用してサービスに接続する
        13.4.3 Socketクラスを使用してサービスを実装する
    13.5 その他のネットワーク機能
    13.6 まとめ

14章    データベース
    14.1 .NETにおけるデータアクセスの展望
        14.1.1 古典的ADO.NET
        14.1.2 LINQとデータベース
        14.1.3 非Microsoft製データアクセステクノロジ
        14.1.4 WCF Data Service
        14.1.5 Silverlightとデータアクセス
        14.1.6 データベース
    14.2 Entity Data Model
        14.2.1 生成されたコード
        14.2.2 マッピングの変更
        14.2.3 関連性
        14.2.4 継承
    14.3 クエリ
        14.3.1 LINQ to Entities
        14.3.2 Entity SQL
        14.3.3 ESQLとLINQの組み合わせ
        14.3.4 EntityClient ADO.NETプロバイダ
    14.4 オブジェクトコンテキスト
        14.4.1 接続の管理
        14.4.2 作成、更新、削除
        14.4.3 トランザクション
        14.4.4 楽観的並行性処理
        14.4.5 コンテキストとエンティティの生存期間
    14.5 WCF Data Services
    14.6 まとめ

15章    アセンブリ
    15.1 .NETコンポーネント:アセンブリ
        15.1.1 参照
        15.1.2 ライブラリを作成する
        15.1.3 アクセス保護
    15.2 名前付け
        15.2.1 署名と厳密名
    15.3 ロード
        15.3.1 アプリケーションフォルダからのロード
        15.3.2 GACからのロード
        15.3.3 Silverlight .xapファイルからロードする
        15.3.4 明示的なロード
    15.4 まとめ

16章    スレッドおよび非同期コード
    16.1 スレッド
        16.1.1 スレッドとOSスケジューラ
        16.1.2 スタック
        16.1.3 スレッドプール
        16.1.4 スレッドアフィニティとコンテキスト
        16.1.5 スレッドに関するよくある誤解
        16.1.6 マルチスレッドコードは難しい
        16.1.7 マルチスレッドの生存戦略
    16.2 同期プリミティブ
        16.2.1 モニター
        16.2.2 その他のロック型
        16.2.3 その他の協調メカニズム
        16.2.4 イベント
        16.2.5 カウントダウン
        16.2.6 BlockingCollection
    16.3 非同期プログラミング
        16.3.1 非同期プログラミングモデル
        16.3.2 イベントベースの非同期パターン
        16.3.3 アドホックな非同期操作
    16.4 タスク並列ライブラリ
        16.4.1 タスク
        16.4.2 キャンセル
        16.4.3 エラー処理
    16.5 データ並列性
        16.5.1 並列Forと並列ForEach
        16.5.2 並列LINQ
    16.6 まとめ

17章    属性およびリフレクション
    17.1 属性
        17.1.1 属性の型
        17.1.2 カスタム属性
    17.2 リフレクション
        17.2.1 メタデータを検査する
        17.2.2 型発見
        17.2.3 特殊な型に対するリフレクション
        17.2.4 実行時バインディング
    17.3 まとめ

18章    ダイナミック
    18.1 静的と動的
        18.1.1 動的スタイルとCOMオートメーション
    18.2 dynamic型
        18.2.1 オブジェクトの型とdynamic
    18.3 相互運用でないシナリオでdynamicを使う?
    18.4 まとめ

19章    COMおよびWin32との相互運用
    19.1 ActiveXコントロールをインポートする
        19.1.1 .NETでコントロールをインポートする
    19.2 相互運用機能アセンブリ
        19.2.1 No PIA
    19.3 64ビットと32ビット
    19.4 P/Invoke
    19.5 ポインタ
    19.6 C# 4.0相互運用機能の構文の強化
        19.6.1 インデクス付きプロパティ
        19.6.2 省略可能なref
    19.7 まとめ

20章    WPFとSilverlight
    20.1 Xamlと分離コード
        20.1.1 Xamlとオブジェクト
    20.2 要素とコントロール
        20.2.1 レイアウトパネル
        20.2.2 グラフィックス要素
        20.2.3 コントロール
        20.2.4 ユーザコントロール
    20.3 コントロールテンプレート
        20.3.1 スタイル
        20.3.2 ビジュアルステートマネージャ
    20.4 データバインディング
        20.4.1 データテンプレート
    20.5 まとめ

21章    ASP.NETプログラミング
    21.1 Web Formsの基礎
        21.1.1 Web Formsイベント
        21.1.2 Webフォームのライフサイクル
    21.2 Webアプリケーションを作成する
        21.2.1 分離コードファイル
        21.2.2 コントロールを追加する
        21.2.3 サーバコントロール
    21.3 データバインディング
        21.3.1 コードを調べる
        21.3.2 コントロールとイベントを追加する
    21.4 まとめ

22章    Windowsフォーム
    22.1 アプリケーションを作成する
        22.1.1 バインディングソースを追加する
    22.2 コントロール
        22.2.1 ドッキングとアンカリング
    22.3 データバインディング
    22.4 イベント処理
    22.5 まとめ

索引

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

1刷正誤表

プログラミングC#第6版 第1刷正誤表

2013年5月10日更新

位置
p.97
10行目
C:¥¥Windows¥system32 C:¥Windows¥system32
p.113
例4-11
下から
3行目
ホース ホース
p.115
6-7行目
ホースを火に向けています。
火は消えつつあります。
火は消えつつあります。
ホースを火に向けています。
p141
8行目
public static void TranslateIntoFrench(Document doc) public static void TranslateIntoJapanese(Document doc)
p145
8行目
class TranslateIntoFrenchProcess : DocumentProcess class TranslateIntoJapaneseProcess : DocumentProcess
p145
12行目
DocumentProcesses.TranslateIntoFrench(doc); DocumentProcesses.TranslateIntoJapanese(doc);
p145
例5-7
4行目
rc.Processes.Add(new TranslateIntoFrenchProcess()); rc.Processes.Add(new TranslateIntoJapaneseProcess());
p150
1番目の
コード片
4行目
rc.Processes.Add(new DocumentProcess(DocumentProcesses.TranslateIntoFrench)); rc.Processes.Add(new DocumentProcess(DocumentProcesses.TranslateIntoJapanese));
p150
2番目の
コード片
4行目
rc.Processes.Add(DocumentProcesses.TranslateIntoFrench); rc.Processes.Add(DocumentProcesses.TranslateIntoJapanese);
p151
例5-11
4行目
rc.Processes.Add(DocumentProcesses.TranslateIntoFrench); rc.Processes.Add(DocumentProcesses.TranslateIntoJapanese);
p152
11行目
millenium'をハイライトします。 'millenium'をハイライトします。
p157
例5-15
4行目
rc.AddProcess(DocumentProcesses.TranslateIntoFrench); rc.AddProcess(DocumentProcesses.TranslateIntoJapanese);
p157
下から
4行目
そこで生産チームはTranslateIntoFrenchの処理に対して そこで生産チームはTranslateIntoJapaneseの処理に対して
p157
下から
2行目
return !doc.Contains("?"); return !doc.Text.Contains("?");
p227
中央
あたり
するコードが混在していました。例7-13ではこれらの役割が明確に分離されています。 するコードが混在していました。例7-14ではこれらの役割が明確に分離されています。
p231
最終行
 2GBの制限がかかるのは個々の配列のサイズだけです)。 1行削除
p.309
1行目
印刷による印刷によって 印刷によって
p.335
下から
10行目
最後の6文字を 最後の4文字を
p.345
下から
17行目
int index = ?1; int index = 1;
p350
2段落
3行目
例10-78のに余計なカンマを取り除くことができます。 例10-78のように余計なカンマを取り除くことができます。
p.388
下から
15-14行目
もしこの値がfalseではなく、OpenBehavior.Overwriterというような謎めいた もしこの値が謎めいたfalseではなく、OpenBehavior.Overwriterという値

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]