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

[cover photo]
TOPICS
発行年月日
PRINT LENGTH
672
ISBN
4-87311-264-8
原書
Programming C#, Fourth Edition
FORMAT

JIS策定に伴い、ますます人気の高まっているプログラミング言語C#。本書はC#を体系的に網羅した信頼のおける解説書の改訂第4版です。言語仕様から応用にいたるまで、C#プログラミングに必要な情報すべてが本書1冊に詰め込まれています。C#の構文、クラスとオブジェクト、継承とポリモーフィズム、演算子のオーバーロード、構造体、インターフェイス、配列とインデクサ、コレクション、文字列操作と正規表現、例外処理、デリゲートとイベント、WindowsフォームやWebフォームの作成、Webサービスの構築などC#プログラミングを極めるための実践的な解説が満載です。

関連ファイル

正誤表

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

正誤表 - 2006年3月掲載(2刷以降は修正済み)

P.240の26行目
  • 【誤】// オーバーロードされた+演算子を使います
  • 【正】// オーバーロードされた=演算子を使います
P.241
  • 【誤】// excellentという語をtrainingの前に挿入します
  • 【正】// excellentという語をTrainingの前に挿入します
P.246の16行目
  • 【誤】// 文字列s1はone two threeとなります
  • 【正】// 文字列s1はOne Two Threeとなります
P.246の18行目
  • 【誤】// s1中の最後の空白(twoの直後)を探します
  • 【正】// s1中の最後の空白(Twoの直後)を探します
P.246の22行目
  • 【誤】// s3は"three"となります
  • 【正】// s3はThreeとなります
P.246の25行目
  • 【誤】// つまりs1は"one two"となります
  • 【正】// つまりs1はOne Twoとなります
P.246の27行目
  • 【誤】// "one"と"two"の間にある空白の位置を
  • 【正】// OneとTwoの間にある空白の位置を
P.246の31行目
  • 【誤】// つまり"two"になります
  • 【正】// つまりTwoになります
P.246の34行目
  • 【誤】// つまり"one"になります
  • 【正】// つまりOneになります
P.250の下から5行目
  • 【誤】// StringBufferクラスを使って
  • 【正】// StringBuilderクラスを使って
P.261の下から5行目
  • 【誤】Console.WriteLine( "Company: {0}",
  • 【正】Console.WriteLine( "company: {0}",
P.319の21行目
  • 【誤】"Delegates fired! Returned result: {0}",
  • 【正】"デリゲートが実行されました!実行結果:{0}",
P.332の1行目
  • 【誤】「Ex」と入力した後、セミコロンを入力するだけでなんということでしょうか。
  • 【正】「Exi」と入力した後、「()」とセミコロンを入力するだけでなんということでしょうか。
P.388の下から3行目
  • 【誤】Hello World! It is now <% Response.Write(DateTime.Now.ToString()); %>
  • 【正】Hello World! 現在の時刻は <% Response.Write(DateTime.Now.ToString()); %> です。
P.418の下から10行目
  • 【誤】例16-2 SalesRankDBWebServices
  • 【正】例16-2 AmazonWebServiceClient
P.432の11行目
  • 【誤】例16-4 SalesDisplayに対する分離コード
  • 【正】例16-4 AmazonSalesRanksに対する分離コード
P.435の下から2行目
  • 【誤】SalesRankDBWebServices
  • 【正】AmazonWebServiceClient
P.468の2行目と8行目
  • 【誤】DoFunc(7)
  • 【正】DoFunc1(7)
P.470の11行目と30行目
  • 【誤】DoFunc(7)
  • 【正】DoFunc1(7)
P.473の23行目
  • 【誤】"?nSingle Type is {0}?n", theType );
  • 【正】"?n取り出した1つの型情報:{0}?n", theType);
P.487の下から18行目
  • 【誤】"Point constructor");
  • 【正】"Pointコンストラクタ");
P.488の下から18行目
  • 【誤】"Shape constructor");
  • 【正】"Shapeコンストラクタ");
P.489の3行目
  • 【誤】"Entered Main");
  • 【正】"Mainの始点");
P.490の15行目
  • 【誤】[Marshaling.vshost.exe] Entered Main
  • 【正】[Marshaling.vshost.exe] Mainの始点
P.534の下から4行目
  • 【誤】Console.Write( " " ); // two spaces per level
  • 【正】Console.Write( " " ); // インデントの深さごとに2つのスペース
P.541の10行目
  • 【誤】// Set it running with a directory name
  • 【正】// ディレクトリ名は実行環境に応じて変更すること
P.555の下から9行目
  • 【誤】@"C:?test?source?myTest.txt" );
  • 【正】@"C:?test?source?myText.txt" );
P.557の6行目
  • 【誤】static public void Main( string[] Args )
  • 【正】public static void Main( string[] args )
P.567の14行目
  • 【誤】buffer = new byte[256];
  • 【正】buffer = new byte[BufferSize];
P.572の下から7行目
  • 【誤】static public void Main( string[] Args )
  • 【正】public static void Main( string[] args )

正誤表 - 2006年7月掲載

P.185の下から2行目
  • 【誤】1次元は列(row)の数を表し、2次元は行(column)の数を表します。
  • 【正】1次元は行(row)の数を表し、2次元は列(column)の数を表します。
P.186の上から5行目
  • 【誤】列の数は2、行の数は3とします。
  • 【正】行の数は2、列の数は3とします。
P.189の上から8行目
  • 【誤】rectangularArray[1,0](2列目の最初)
  • 【正】rectangularArray[1,0](2行目の最初)
P.189の上から9行目
  • 【誤】rectangularArray[0,3](1列目の4番目)
  • 【正】rectangularArray[0,3](1行目の4番目)
P.189の下から13行目
  • 【誤】ジャグ配列を作成するときは、列の数を指定します。列はそれぞれ、
  • 【正】ジャグ配列を作成するときは、行の数を指定します。行はそれぞれ、
P.190の上から12行目
  • 【誤】// 4列のジャグ配列を作成します
  • 【正】// 4行のジャグ配列を作成します
P.190の上から14行目
  • 【誤】// 最初の列の長さは5です
  • 【正】// 最初の行の長さは5です
P.190の上から16行目
  • 【誤】// 2番目の列の長さは2です
  • 【正】// 2番目の行の長さは2です
P.190の上から18行目
  • 【誤】// 3番目の列の長さは3です
  • 【正】// 3番目の行の長さは3です
P.190の上から20行目
  • 【誤】// 最後の列の長さは5です
  • 【正】// 最後の行の長さは5です
P.191の下から15行目
  • 【誤】この例では、4列のジャグ配列を作成しています。
  • 【正】この例では、4行のジャグ配列を作成しています。
P.191の下から13行目
  • 【誤】2次元目のサイズは、各列
  • 【正】2次元目のサイズは、各行
P.191の下から12行目
  • 【誤】各列の配列はそれぞれサイズが異なっています。
  • 【正】各行の配列はそれぞれサイズが異なっています。
P.191の下から11行目
  • 【誤】// 最初の列の長さは5です
  • 【正】// 最初の行の長さは5です
P.191の下から9行目
  • 【誤】// 2番目の列の長さは2です
  • 【正】// 2番目の行の長さは2です
P.191の下から7行目
  • 【誤】// 3番目の列の長さは3です
  • 【正】// 3番目の行の長さは3です
P.191の下から5行目
  • 【誤】// 最後の列の長さは5です
  • 【正】// 最後の行の長さは5です
P.191の下から3行目
  • 【誤】各列の配列を作成した後は、
  • 【正】各行の配列を作成した後は、

目次

まえがき

I部 C#言語

1章 C#と.NET Framework
    1.1 .NETプラットフォーム
    1.2 .NET Framework
    1.3 コンパイルとMSIL
    1.4 C#言語

2章 最初の一歩:Hello World
    2.1 クラス、オブジェクト、型
        2.1.1 メソッド
        2.1.2 コメント
        2.1.3 コンソールアプリケーション
        2.1.4 名前空間
        2.1.5 ドット演算子(.)
        2.1.6 usingキーワード
        2.1.7 アルファベットの大文字と小文字
        2.1.8 staticキーワード
    2.2 “Hello World”の開発
        2.2.1 “Hello World”の編集
        2.2.2 “Hello World”のコンパイルと実行
    2.3 Visual Studioデバッガの使用

3章 C#言語の基礎
    3.1 型
        3.1.1 組み込みの型
    3.2 変数と定数
        3.2.1 確実な代入
        3.2.2 定数
        3.2.3 列挙体
        3.2.4 文字列
        3.2.5 識別子
    3.3 式
    3.4 空白文字
    3.5 文
        3.5.1 無条件分岐
        3.5.2 条件分岐
        3.5.3 繰り返し文
    3.6 演算子
        3.6.1 代入演算子(=)
        3.6.2 算術演算子
        3.6.3 インクリメント、デクリメント演算子
        3.6.4 関係演算子
        3.6.5 条件式に用いる論理演算子
        3.6.6 演算子の優先順位
        3.6.7 唯一の3項演算子
    3.7 プリプロセスディレクティブ
        3.7.1 シンボルの定義
        3.7.2 シンボルの未定義化
        3.7.3 #if、#elif、#else、#endif
        3.7.4 #region

4章 クラスとオブジェクト
    4.1 クラスの定義
        4.1.1 アクセス修飾子
        4.1.2 メソッドの引数
    4.2 オブジェクトの作成
        4.2.1 コンストラクタ
        4.2.2 初期化子
        4.2.3 ICloneableインターフェイス
        4.2.4 thisキーワード
    4.3 staticメンバの使用
        4.3.1 staticメソッドの呼び出し
        4.3.2 staticコンストラクタの使用
        4.3.3 staticクラス
        4.3.4 staticフィールドの使用
    4.4 オブジェクトの破壊
        4.4.1 C#のデストラクタ
        4.4.2 デストラクタかDisposeか
        4.4.3 Closeメソッド
        4.4.4 using文
    4.5 引数の受け渡し
        4.5.1 参照渡し
        4.5.2 out引数による確実な代入
    4.6 メソッドとコンストラクタのオーバーロード
    4.7 プロパティによるデータのカプセル化
        4.7.1 getアクセサ
        4.7.2 setアクセサ
        4.7.3 プロパティのアクセス修飾子
    4.8 readonlyフィールド

5章 継承とポリモーフィズム
    5.1 特化と汎化
    5.2 継承
        5.2.1 継承の実装方法
    5.3 ポリモーフィズム
        5.3.1 ポリモーフィックな型の作成
        5.3.2 ポリモーフィックなメソッドの作成
        5.3.3 基本クラスのコンストラクタの呼び出し
        5.3.4 アクセス制御
        5.3.5 newとオーバーライドによるバージョン管理
    5.4 抽象クラス
        5.4.1 abstractの限界
        5.4.2 シールクラス
    5.5 すべてのクラスの根:Object
    5.6 型のボックス化とボックス化解除
        5.6.1 ボックス化は暗黙のうちに
        5.6.2 ボックス化解除は明示的に
    5.7 入れ子になったクラス

6章 演算子のオーバーロード
    6.1 operatorキーワード
    6.2 他.NET言語への配慮
    6.3 オーバーロードすべき場合
    6.4 対となる比較演算子
    6.5 ==演算子
    6.6 変換演算子

7章 構造体
    7.1 構造体の定義
    7.2 構造体の作成
        7.2.1 値型
        7.2.2 newを用いない構造体の作成

8章 インターフェイス
    8.1 インターフェイスの定義および実装
        8.1.1 複数のインターフェイスの実装
        8.1.2 インターフェイスの拡張
        8.1.3 インターフェイスの結合
    8.2 インターフェイスの型を通したアクセス
        8.2.1 インターフェイスから特定の型へのキャスト
        8.2.2 is演算子
        8.2.3 as演算子
        8.2.4 is演算子かas演算子か
        8.2.5 インターフェイスか抽象クラスか
    8.3 インターフェイスが規定するメソッドのオーバーライド
    8.4 明示的なインターフェイスメンバの実装
        8.4.1 インターフェイスメンバの選択的な公開
        8.4.2 メンバの隠蔽
        8.4.3 インターフェイスを通した値型へのアクセス

9章 配列、インデクサ、コレクション
    9.1 配列
        9.1.1 配列の宣言
        9.1.2 要素の既定値
        9.1.3 配列の要素へのアクセス
    9.2 foreach文
        9.2.1 配列の各要素の初期化
        9.2.2 paramsキーワード
        9.2.3 多次元配列
        9.2.4 配列の境界
        9.2.5 配列の型変換
        9.2.6 配列のソート
    9.3 インデクサ
        9.3.1 インデクサと代入
        9.3.2 整数以外を添字とするインデクサ
    9.4 コレクションのためのインターフェイス
        9.4.1 IEnumerable>T<インターフェイス
    9.5 制約
    9.6 List>T<
        9.6.1 IComparableインターフェイスの実装
        9.6.2 IComparerインターフェイスの実装
    9.7 Queueクラス
    9.8 Stackクラス
    9.9 Dictionaryクラス
        9.9.1 IDictionary>K,V<

10章 文字列と正規表現
    10.1 文字列
        10.1.1 文字列の作成
        10.1.2 ToStringメソッド
        10.1.3 文字列の操作
        10.1.4 部分文字列の取得
        10.1.5 文字列の分割
        10.1.6 StringBuilderクラス
    10.2 正規表現
        10.2.1 正規表現を使う:Regexクラス
        10.2.2 MatchCollectionクラス
        10.2.3 グループ
        10.2.4 CaptureCollectionクラス

11章 例外
    11.1 例外の発生と捕捉
        11.1.1 throw文
        11.1.2 catch節
        11.1.3 finally節
    11.2 例外オブジェクト
    11.3 独自の例外
    11.4 例外の再スロー

12章 デリゲートとイベント
    12.1 デリゲート
        12.1.1 デリゲートを使ったメソッドの実行時指定
        12.1.2 デリゲートとインスタンスメソッド
        12.1.3 staticデリゲート
        12.1.4 デリゲートを提供するプロパティ
    12.2 マルチキャスト
    12.3 イベント
        12.3.1 publishとsubscribe
        12.3.2 イベントとデリゲート
        12.3.3 イベントによるデリゲートの問題点の解決
        12.3.4 eventキーワード
    12.4 匿名メソッドの使用
    12.5 マルチキャストデリゲートの各メソッドからの返り値
        12.5.1 デリゲートの非同期呼び出し
        12.5.2 コールバック

II部 C#プログラミング

13章 Windowsアプリケーションの作成
    13.1 単純なWindowsフォームの作成
        13.1.1 Visual Studioのデザイナを使う
    13.2 Windowsフォームアプリケーションの作成
        13.2.1 基本的なユーザインターフェイスフォームの作成
        13.2.2 TreeViewのデータ設定
        13.2.3 TreeViewのイベントの処理
        13.2.4 [コピー]ボタンのイベントの実装
        13.2.5 [削除]ボタンのイベントの処理
    13.3 XMLドキュメントコメント

14章 ADO.NETを使ったデータアクセス
    14.1 リレーショナルデータベースとSQL
        14.1.1 テーブル、レコード、列
        14.1.2 正規化
        14.1.3 宣言参照整合性
        14.1.4 SQL
    14.2 ADO.NETのオブジェクトモデル
        14.2.1 DataTableとDataColumn
        14.2.2 Relations
        14.2.3 Rowsコレクション
        14.2.4 DataAdapter
        14.2.5 DBCommandとDBConnection
        14.2.6 DataAdapter
        14.2.7 DataReader
    14.3 ADO.NET
    14.4 OLE DBマネージプロバイダの使用
    14.5 データを連結したコントロールの使用
        14.5.1 プログラムからのDataGridのデータ設定
        14.5.2 DataSetのカスタマイズ

15章 ASP.NETおよびWebサービスプログラミング
    15.1 Webフォームを理解する
        15.1.1 Webフォームのイベント
        15.1.2 Webフォームの有効期間
    15.2 Webフォームの作成
        15.2.1 分離コードファイル
    15.3 コントロールの追加
        15.3.1 サーバサイドコントロール
    15.4 データの関連づけ
        15.4.1 コードの詳細
        15.4.2 コントロールとイベントの追加
    15.5 Webサービス
    15.6 SOAP、WSDLならびに探索ドキュメント
        15.6.1 サーバ側の準備
        15.6.2 クライアント側の準備
    15.7 Webサービスの作成
        15.7.1 Webサービスのテスト
        15.7.2 WSDLドキュメントの表示
    15.8 プロキシの作成
        15.8.1 Webサービスのテスト

16章 機能連係したアプリケーションの開発
    16.1 全体の概要
    16.2 Webサービスクライアントの作成
    16.3 データの表示
        16.3.1 GridViewへのデータ設定
        16.3.2 RowDataBoundイベントの処理
    16.4 カテゴリ検索

III部 CLRと.NET Framework

17章 アセンブリとバージョン管理
    17.1 PEファイル
    17.2 メタデータ
    17.3 セキュリティ境界
    17.4 マニフェスト
    17.5 マルチモジュールアセンブリ
        17.5.1 マルチモジュールアセンブリのビルド
    17.6 プライベートアセンブリ
    17.7 共有アセンブリ
        17.7.1 「DLL地獄」の終結
        17.7.2 バージョン管理
        17.7.3 厳密名
        17.7.4 GAC
        17.7.5 共有アセンブリのビルド
        17.7.6 その他のアセンブリ要件

18章 属性とリフレクション
    18.1 属性
        18.1.1 属性
        18.1.2 カスタム属性
    18.2 リフレクション
        18.2.1 メタデータの表示
        18.2.2 型の探索
        18.2.3 型のリフレクション
        18.2.4 実行時バインディング

19章 マーシャリングとリモート処理
    19.1 アプリケーションドメイン
        19.1.1 アプリケーションドメインの作成と使用方法
        19.1.2 アプリケーションドメイン境界を越えるオブジェクトの作成
    19.2 コンテキスト
        19.2.1 コンテキスト拘束オブジェクトとコンテキスト非拘束オブジェクト
        19.2.2 コンテキスト境界を越えるオブジェクトの作成
    19.3 リモート処理
        19.3.1 サーバオブジェクトを理解する
        19.3.2 インターフェイスを使用したサーバの機能作成
        19.3.3 サーバの作成
        19.3.4 クライアントの作成
        19.3.5 SingleCallの使用
        19.3.6 RegisterWellKnownServiceTypeを理解する
        19.3.7 エンドポイントを理解する

20章 スレッドと同期処理
    20.1 スレッド
        20.1.1 スレッドの開始
        20.1.2 スレッドの結合
        20.1.3 Sleepを使ったスレッドのブロック処理
        20.1.4 スレッドの停止
    20.2 同期処理
        20.2.1 Interlockedクラスの使用
        20.2.2 ロックの使用
        20.2.3 Monitorの使用
    20.3 競合状態とデッドロック
        20.3.1 競合状態
        20.3.2 デッドロック

21章 ストリーム
    21.1 ファイルとディレクトリ
        21.1.1 Directoryの使用
        21.1.2 DirectoryInfoオブジェクトの作成
        21.1.3 Fileクラスの使用
        21.1.4 ファイルの修正
    21.2 データの読み取りと書き込み
        21.2.1 バイナリファイル
        21.2.2 BufferedStream
        21.2.3 テキストファイルの操作
    21.3 非同期I/O
    21.4 ネットワークI/O
        21.4.1 ネットワークストリームサーバの構築
        21.4.2 ネットワークストリームクライアントの作成
        21.4.3 複数コネクションの扱い
        21.4.4 非同期ネットワークファイルストリーム
    21.5 Webストリーム
    21.6 シリアル化
        21.6.1 フォーマッタの使用
        21.6.2 シリアル化の使用
        21.6.3 一時データの扱い
    21.7 分離ストレージ

22章 .NETとCOMの連携
    22.1 ActiveXコントロールのインポート
        22.1.1 ActiveXコントロールの作成
        22.1.2 ActiveXコントロールを.NETにインポートする
    22.2 COMコンポーネントのインポート
        22.2.1 COMテスト用フォームの実装
        22.2.2 COMのDLLを.NETにインポートする
        22.2.3 タイプライブラリのインポート
        22.2.4 手動でのインポート
        22.2.5 テストプログラムの実行
        22.2.6 実行時バインディングおよびリフレクションの使用
    22.3 .NETコンポーネントのエクスポート
        22.3.1 タイプライブラリの作成
    22.4 プラットフォーム呼び出し(P/Invoke)
    22.5 ポインタ

付録 C#のキーワード

索引