初心者に最適のC#独習書が、C# 4.0に対応して再登場
C# 言語の独学に最適な教科書として好評の『独習C#』が、3 年ぶりの改訂で新登場です。本書では、C# でオブジェクト指向プログラミングを行なう際に必要となる基本的な知識・概念・機能から、C#4.0 の新機能まで、さまざまなサンプルプログラムを例示しながら詳細かつ丁寧に解説します。プログラミングの基礎知識がない方でも、解説→例題(サンプル)→理解度チェックという3つのステップで、C#の文法を完全習得できます。「一からC#言語を学びたい」という方におすすめの1冊です。
【原書タイトル】 C#:A Beginner's Guide
シリーズ75万部の信頼と実績
・-
世界中で読まれているハーバード・シルトのC#言語の標準教科書
・-
初心者がC#を学ぶにふさわしい一冊
・-
C#でプログラミングを行う際に必要となる基本的な知識・概念・機能を網羅的かつ体系的に習得できる
はじめに
本書の構成
プログラミング経験は不要
必要なソフトウェア
コードのダウンロード
監修・改訂者のことば~第3版の発刊にあたり~
第1章 C#の基礎
1.1 C#の系統樹
C:現代プログラミングの始まり
OOPとC++の登場
インターネットとJavaの登場
C#の登場
1.2 C#の進化
1.3 C#と.NET Frameworkの関係
.NET Frameworkとは
共通言語ランタイムの仕組み
マネージコードとアンマネージコード
共通言語仕様
1.4 オブジェクト指向プログラミング
カプセル化
ポリモーフィズム
継承
1.5 最初の簡単なプログラム
C# 4.0コンパイラを入手する
Visual StudioのIDEを使用する
C#コマンドラインコンパイラcsc.exeを使う
1.6 最初のサンプルプログラムの各行について
1.7 構文エラーの処理
1.8 完全修飾名
1.9 変数の使用
1.10 double型
例1-1 華氏を摂氏に変換する
1.11 2つの制御文
if文
forループ
1.12 コードブロックの使用
1.13 セミコロンと改行
1.14 字下げを行なう
例1-2 温度を変換するプログラムを改良する
1.15 C#のキーワード
1.16 識別子
1.17 C#のクラスライブラリ
この章の理解度チェック
第2章 データ型と演算子
2.1 なぜデータ型が重要か
2.2 C#の値型
整数型
2.3 浮動小数点数型
2.4 decimal型
2.5 文字表現
2.6 bool型
2.7 出力オプション
例2-1 火星と会話する
2.8 リテラル
16進数のリテラル
エスケープシーケンス
文字列リテラル
2.9 変数を理解する
変数を初期化する
動的な初期化
暗黙的に型指定されるローカル変数
2.10 変数のスコープとライフタイム
2.11 演算子
2.12 算術演算子
インクリメントとデクリメント
2.13 関係演算子と論理演算子
ショートサーキット評価を行なう短絡形の論理演算子
例2-2 論理演算子の真偽表を表示させる
2.14 代入演算子
複合代入
代入時の型変換
2.15 データ型の明示的なキャスト
2.16 演算子の優先順位
2.17 式における型変換
2.18 スペースと括弧
例2-3 ローンの返済額を計算する
この章の理解度チェック
第3章 プログラムの制御文
3.1 キーボードから文字を入力する
3.2 if文
ifのネスト
if-else-ifのハシゴ
3.3 switch文
switch文のネスト
例3-1 C#ヘルプシステムの最初のバージョンを作成する
3.4 forループ
forループの変種
項目を省略する
無限ループ
処理の中身のないループ
ループ制御変数をforループ内で宣言する
3.5 whileループ
3.6 do-whileループ
例3-2 C#ヘルプシステムを改良する
3.7 breakを使ってループから抜け出す
3.8 continueを使う
3.9 goto文
例3-3 C#ヘルプシステムを完成させる
3.10 ループのネスト
この章の理解度チェック
第4章 クラス、オブジェクト、メソッドの基礎
4.1 クラスの基礎
クラスの構文
クラスを定義する
4.2 オブジェクトの生成方法
4.3 参照型の変数の代入
4.4 メソッド
Vehicleクラスへメソッドを追加する
メソッドからの復帰
値を返して復帰する
パラメーターを使う
Vehicleクラスへパラメーターのあるメソッドを追加する
例4-1 ヘルプクラスを作成する
4.5 コンストラクター
パラメーターのあるコンストラクター
Vehicleクラスへコンストラクターを追加する
4.6 new演算子
4.7 ガベージコレクションとデストラクター
デストラクター
4.8 thisキーワード
この章の理解度チェック
第5章 その他のデータ型と演算子
5.1 配列
1次元配列
配列の初期化
厳密な境界
例5-1配列のソート
5.2 多次元配列
2次元配列
3次元以上の配列
多次元配列の初期化
5.3 ジャグ配列
5.4 配列参照を代入する
5.5 配列のLengthプロパティを使う
5.6 暗黙的に型指定されるローカル配列を作成する
例5-2キュークラス
5.7 foreachループ
5.8 string
stringの作成
stringを操作する
stringの配列
stringは不変
5.9 ビット演算子
ビットごとのAND、OR、XOR、NOT演算子
シフト演算子
ビットごとの複合代入演算子
例5-3 ShowBitsクラス
5.10 条件演算子
この章の理解度チェック
第6章 メソッドとクラスの詳細
6.1 クラスのメンバーへのアクセスを制御する
C#のアクセス修飾子
例6-1 SimpleQueueクラスを改良する
6.2 メソッドへオブジェクト参照を渡す
引数の渡し方
6.3 参照パラメーターと出力パラメーター
参照パラメーター
出力パラメーター
6.4 可変長引数を使う
6.5 オブジェクトを返す
6.6 メソッドのオーバーロード
6.7 コンストラクターのオーバーロード
オーバーロードされたコンストラクターをthisによって呼び出す
例6-2 SimpleQueueクラスのコンストラクターのオーバーロード
6.8 Main( )メソッド
Main( )から値を返す
Main( )に引数を渡す
6.9 再帰
6.10 staticを理解する
6.11 静的コンストラクターと静的クラス
例6-3 クイックソート
この章の理解度チェック
第7章 演算子のオーバーロード、インデクサー、プロパティ―
7.1 演算子のオーバーロード
演算子メソッドの構文
二項演算子のオーバーロード
単項演算子のオーバーロード
柔軟性を付加する
関係演算子のオーバーロード
演算子オーバーロードのヒントと制限
7.2 インデクサー
多次元インデクサー
インデックスの制限事項
7.3 プロパティ
自動実装するプロパティ
プロパティの制限
7.4 アクセサーにアクセス修飾子を付ける
例7-1 Setクラスを作成する
この章の理解度チェック
第8章 継承
8.1 継承の基本
8.2 メンバーへのアクセスと継承
8.3 protectedメンバー
8.4 コンストラクターと継承
基本クラスのコンストラクターの呼び出し
8.5 継承と名前の隠蔽
隠蔽された名前にbaseを使ってアクセスする
例8-1 Vehicleクラスを拡張する
8.6 多層階層を作成する
8.7 コンストラクターはいつ呼び出されるか?
8.8 基本クラスの参照と派生オブジェクト
8.9 仮想メソッドとオーバーライド
メソッドをオーバーライドする理由
仮想メソッドを適用する
8.10 抽象クラス
8.11 sealedを使って継承を防ぐ
8.12 objectクラス
ボックス化とボックス化解除
この章の理解度チェック
第9章 インターフェイス、構造体、列挙型
9.1 インターフェイス
インターフェイスの実装
9.2 インターフェイス参照を使用する
例9-1 キューのインターフェイスを作成する
9.3 インターフェイスのプロパティ
9.4 インターフェイスのインデクサー
9.5 インターフェイスを継承する
9.6 明示的な実装
9.7 構造体
9.8 列挙型
列挙型の値を指定する
列挙型のベースとなる型を指定する
この章の理解度チェック
第10章 例外処理
10.1 System.Exceptionクラス
10.2 例外処理の基礎
tryとcatchの使用
例外の簡単な例(1)
例外の簡単な例(2)
10.3 例外が捕捉されなかった場合の動作
10.4 例外処理後のプログラムの続行
10.5 複数のcatch句を使用する
10.6 すべての例外を捕捉する
10.7 tryブロックをネストする
10.8 例外を投げる
例外を再度投げる
10.9 finallyを使用する
10.10 Exceptionクラス
よく使う例外
10.11 Exceptionクラスの派生
10.12 例外の派生クラスの捕捉
例10-1 SimpleQueueクラスへの例外の追加
10.13 checkedとuncheckedを使用する
この章の理解度チェック
第11章 I/O処理
11.1 ストリーム――C#のI/Oの基盤
バイトストリームと文字ストリーム
定義済みのストリーム
11.2 ストリーム関連のクラス
Streamクラス
バイトストリームクラス
文字ストリームクラス
バイナリストリーム
11.3 コンソールI/O
コンソール入力の読み込み
コンソール出力の書き込み
11.4 FileStreamとバイトベースのファイルI/O
ファイルのオープンとクローズ
FileStreamからのバイトデータの読み込み
ファイルへの書き込み
11.5 文字ベースのファイルI/O
StreamWriterの使い方
StreamReaderの使い方
11.6 標準ストリームのリダイレクト
例11-1 ファイル比較ユーティリティ
11.7 バイナリデータの読み書き
BinaryWriter
BinaryReader
バイナリI/Oの例
11.8 ランダムアクセスファイル
11.9 数値を表わす文字列を数値型データに変換する方法
例11-2 ディスクベースのヘルプシステム
この章の理解度チェック
第12章デリゲート、イベント、名前空間
12.1 デリゲート
デリゲートを使用してインスタンスメソッドを呼び出す
マルチキャスト
デリゲートを使う理由
12.2 匿名メソッド
12.3 イベント
マルチキャストイベントの例
イベントハンドラーに匿名メソッドを使う
12.4 名前空間
名前空間の宣言
usingディレクティブ
usingディレクティブのもう1つの形式
名前空間の追加
名前空間のネスト
global名前空間
例12-1 Setの名前空間への格納
この章の理解度チェック
第13章 ジェネリック
13.1 ジェネリックとは?
13.2 ジェネリックの基礎
当てはめた型引数が異なる場合のジェネリック型の扱い
ジェネリックによる型の安全性の向上
13.3 2つの型パラメーターを持つジェネリック
13.4 型パラメーターの制約
基本クラス制約を使用する
2つの型パラメーターの関係を確立する制約
インターフェイス制約を使用する
コンストラクター制約
参照型制約と値型制約
複数の制約を使用する
13.5 型パラメーターのデフォルト値を指定する
13.6 ジェネリック構造体
13.7 ジェネリックメソッド
ジェネリックメソッド呼び出しに明示的な型の実引数を使う
ジェネリックメソッドの制約を使う
13.8 ジェネリックデリゲート
13.9 ジェネリックインターフェイス
例13-1 ジェネリック対応のキューを作成する
この章の理解度チェック
第14章 LINQ
14.1 LINQとは?
14.2 LINQの基礎
簡単なクエリ
1つのクエリは複数回実行できる
クエリに関連するデータ型
クエリの構文の一般形
14.3 where句によるデータの絞り込み
14.4 orderby句によるクエリ結果の並べ替え
14.5 要素を表わすselect句のさまざまな使い方
14.6 group句によるクエリ結果のグループ化
14.7 intoによる継続
14.8 let句によるクエリ内の変数作成
14.9 join句による2つのシーケンスの結合
14.10 匿名型とオブジェクト初期化子
14.11 グループ結合の作成
14.12 クエリメソッドとラムダ式
基本的なクエリメソッド
ラムダ式
クエリメソッドを使用してクエリを作成する
その他のクエリ関連の拡張メソッド
遅延実行と即時実行
14.13 拡張メソッドの詳細
14.14 ラムダ式の詳細
式形式のラムダ
ステートメント形式のラムダ
例14-1 イベントハンドラーの実装にラムダ式を使用する
この章の理解度チェック
第15章 プリプロセッサ、実行時の型の識別、null許容型、高度なトピック
15.1 プリプロセッサ
#define
#ifと#endif
#elseと#elif
#undef
#error
#warning
#line
#regionと#endregion
#pragma
15.2 実行時の型の識別
is演算子による型チェック
as演算子の使用
typeof演算子の使用
15.3 null許容型
??演算子
null許容型での関係演算子と論理演算子の利用
15.4 unsafeコード
ポインターの概要
unsafeキーワード
fixedの使用
15.5 属性
Conditional属性
Obsolete属性
15.6 変換演算子
15.7 コレクション
コレクションの基礎
コレクションの使用例――動的に要素数が変化する配列の作成
例15-1 Queueコレクションを使用する
15.8 その他のキーワード
internalアクセス修飾子
sizeof
lock
readonly
stackalloc
using文
constとvolatile
partial修飾子
yield
extern
この章の理解度チェック
第16章 C# 4.0の新機能
16.1 名前付き引数と省略可能な引数
名前付き引数
省略可能な引数
名前付き引数と省略可能な引数の併用例
16.2 dynamic型の基本
dynamic型の基本的な記述方法と機能
事前バインディングと動的バインディング
C#におけるdynamic型の位置づけ
16.3 動的オブジェクトとdynamic型の利用
コレクションを使用して動的構造を扱う
dynamic型と動的オブジェクトを使用して動的構造を扱う
16.4 リフレクションにおけるdynamic型の利用
16.5 [予備知識①]デリゲートの型変換の再確認
デリゲートの型変換の互換性
16.6 [予備知識②]C# 2.0におけるデリゲートの共変性と反変性
デリゲートの共変性と反変性の例
16.7 ジェネリックの共変性と反変性①(ジェネリックデリゲートの場合)
ジェネリックデリゲートの型パラメーターの共変性と反変性
16.8 ジェネリックの共変性と反変性②(ジェネリックインターフェイスの場合)
ジェネリックインターフェイスの型パラメーターの共変性と反変性
16.9 今後の学習
この章の理解度チェック
付録A 「この章の理解度チェック」解答
お問い合わせ
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
利用許諾に関するお問い合わせ
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。
ご購入いただいた書籍の種類を選択してください。
刷数は奥付(書籍の最終ページ)に記載されています。
現在表示されている正誤表の対象書籍
書籍の種類:
書籍の刷数:
本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。
対象の書籍は正誤表がありません。
最終更新日:2015年08月18日
発生刷 |
ページ数 |
書籍改訂刷 |
電子書籍訂正 |
内容 |
登録日 |
1刷 |
062
サンプルコードの下から7~14行目 |
4刷 |
済 |
誤 |
Console.WriteLine(msg2 + radius);
area = pi * radius * radius;
Console.WriteLine(msg + area);
・
・
・
Console.WriteLine(msg2 + radius);
area = pi * radius * radius;
Console.WriteLine(msg + area); |
正 |
Console.WriteLine(msg + radius);
area = pi * radius * radius;
Console.WriteLine(msg2 + area);
・
・
・
Console.WriteLine(msg + radius);
area = pi * radius * radius;
Console.WriteLine(msg2 + area); |
備
考 |
WriteLineメソッドの引数msgとmsg2の位置が逆です。4か所あります。 |
|
2012.10.09 |
1刷 |
062
プログラムの実行結果 |
5刷 |
済 |
誤 |
Area : 10
Radius : 314.12
Area : 12
Radius : 452.3904 |
正 |
Radius: 10
Area: 314.16
Radius: 12
Area: 452.3904 |
備
考 |
「Area」と「Radius」が逆になっていました。 |
|
2013.06.11 |
1刷 |
219
リスト部分の上から8行目と10行目のメッセージストリングの指定部分(2か所) |
5刷 |
済 |
|
2014.01.06 |
1刷 |
263
ページ下部、コードの下から6行目および11行目 |
4刷 |
済 |
誤 |
fs.Errflag |
正 |
fs.ErrFlag |
備
考 |
flagのfは大文字(F) |
|
2012.11.07 |
1刷 |
264
ページ上部、コードの2~3行目 |
4刷 |
済 |
誤 |
Fail quietyly.
0 10 20 30 40 0 0 0 0 0
|
正 |
Fail quietyly.
0 10 20 30 40 |
|
2012.11.07 |
1刷 |
268
小見出し |
2刷 |
済 |
誤 |
インデックスの制限事項 |
正 |
インデクサーの制限事項 |
|
2010.12.03 |
1刷 |
268
ページ上部、コードの2行目 |
4刷 |
済 |
誤 |
Fail quietly.
0 10 20 0 0 0
|
正 |
Fail quietly.
0 10 20 |
|
2012.11.09 |
1刷 |
292
コードの10行目 |
4刷 |
済 |
誤 |
set { pri_width = value; } |
正 |
set { pri_width = value < 0 ? -value : value; }
|
|
2012.11.06 |
1刷 |
292
コードの14行目 |
4刷 |
済 |
誤 |
set { pri_height = value; } |
正 |
set { pri_height = value < 0 ? -value : value; } |
|
2012.11.06 |
1刷 |
297
本文、下から2行目 |
4刷 |
済 |
誤 |
Weightプロパティ |
正 |
Heightプロパティ |
|
2012.09.27 |
1刷 |
406
冒頭のコード 5行目 |
4刷 |
済 |
誤 |
catch(FileNotFoundException exc) { |
正 |
catch(IOException exc) { |
|
2012.11.06 |
1刷 |
407
下から3行目 |
4刷 |
済 |
誤 |
int型からchar型へ暗黙的な型変換を行っています。
|
正 |
int型からchar型へ明示的な型変換を行っています。 |
|
2012.11.06 |
1刷 |
418
コード、下から10行目 |
7刷 |
済 |
誤 |
Console.WriteLine("Usage: ComFiles F1 F2"); |
正 |
Console.WriteLine("Usage: CompFiles F1 F2"); |
|
2015.07.28 |
1刷 |
440
前ページから続くコード、下から5行目 |
7刷 |
済 |
誤 |
strOp = Reserve; |
正 |
strOp = Reverse; |
|
2015.06.08 |
1刷 |
444
コード、下から17~16行目 |
7刷 |
済 |
誤 |
StrMod replaceSp = ReplaceSpace;
StrMod removeSp = RemoveSpace; |
正 |
StrMod replaceSp = ReplaceSpaces;
StrMod removeSp = RemoveSpaces; |
|
2015.07.28 |
1刷 |
496
「エキスパートに訊く」内のコード |
7刷 |
済 |
誤 |
SomeClass<string, bool> someObj = new SomeClass<string, boo>("testing", false);
これは次のように記述できます。
var someObj = new SomeClass<string, boo>("testing", false); |
正 |
SomeClass<string, bool> someObj = new SomeClass<string, bool>("testing", false);
これは次のように記述できます。
var someObj = new SomeClass<string, bool>("testing", false); |
|
2015.06.08 |
1刷 |
503
「13.9 ジェネリックインターフェイス」のコード、下から3行目 |
7刷 |
済 |
誤 |
public T GetY() { return X; } |
正 |
public T GetY() { return Y; } |
|
2015.07.16 |
1刷 |
504
下から8行目 |
7刷 |
済 |
誤 |
The X,Y values in xyObj: 10, 10 |
正 |
The X,Y values in xyObj: 10, 20 |
|
2015.07.16 |
1刷 |
519
下から13~14行目 |
4刷 |
済 |
誤 |
配列変数である変数nには |
正 |
範囲変数である変数nには |
|
2012.11.09 |
1刷 |
535
下から14行目(途中のコードは含みません) |
5刷 |
済 |
誤 |
ここでのクエリ操作では、order句とselect句 |
正 |
ここでのクエリ操作では、orderby句とselect句 |
|
2012.12.05 |
1刷 |
546
表、「クエリのキーワード」3行目 |
5刷 |
済 |
|
2012.12.05 |
1刷 |
549
ページ下部のコード、下から2行目の末尾 |
5刷 |
済 |
|
2012.12.05 |
1刷 |
595
表、「メソッド」1行目 |
2刷 |
済 |
誤 |
int InexOf(T obj) |
正 |
int IndexOf(T obj) |
|
2010.12.03 |
1刷 |
616
ページ中央のコード、下から5行目 |
5刷 |
済 |
誤 |
currentIndex <= array.Length; currentIndex++) |
正 |
currentIndex < array.Length; currentIndex++) |
備
考 |
「=」は不要 |
|
2012.12.28 |
1刷 |
618
コード、下から7行目 |
5刷 |
済 |
誤 |
for(int currentIndex=startIndex; currentIndex <= array.Length; |
正 |
for(int currentIndex=startIndex; currentIndex < array.Length; |
備
考 |
「currentIndex <= array.Length;」の「=」は不要。 |
|
2012.12.28 |
1刷 |
619
ページ下のコード、6~7行目 |
5刷 |
済 |
誤 |
result = CalcPayment(principal: 1000000.0m, years: 5,
payPerYear: 6, rate: 0.075m); |
正 |
result = CalcPayment(1000000.0m, 0.075m, 12.0m, 5.0m); |
|
2012.12.28 |
1刷 |
656
理解度チェック17 11行目、14行目 |
8刷 |
済 |
誤 |
11行目・・・
Updatedイベントの引数はobject型およびStatus1型、
14行目・・・
Modifiedイベントの引数はobject型およびStatus2型、 |
正 |
11行目・・・
Updatedイベントの引数はobject型およびStatusEx1型、
14行目・・・
Modifiedイベントの引数はobject型およびStatusEx2型、 |
|
2015.08.18 |
1刷 |
xii
第7章、7.2節の2つ目の小見出し |
2刷 |
済 |
誤 |
インデックスの制限事項 |
正 |
インデクサーの制限事項 |
|
2010.12.03 |
2刷 |
153
コード、下から7行目 |
4刷 |
済 |
誤 |
" power is " + GetPwr()); |
正 |
" power is " + x.GetPwr()); |
|
2012.08.03 |
2刷 |
522
本文1つ目の段落の下にあるコード |
4刷 |
済 |
誤 |
var posNums = from int n nums
// ・・・ |
正 |
var posNums = from int n in nums
// ・・・ |
|
2012.08.03 |