[完全版]究極のC#プログラミング
――新スタイルによる実践的コーディング

[表紙][完全版]究極のC#プログラミング ――新スタイルによる実践的コーディング

紙版発売

B5変形判/408ページ

定価3,278円(本体2,980円+税10%)

ISBN 978-4-7741-3862-6

ただいま弊社在庫はございません。

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

C#は現在ではよく使われている言語であり処理系ですが,Cなどに比べると,まだ書籍の種類は多くありません。案外,言語としてのポイントを絞った,効率的な学習を意図した本というものがないように思われます。そこで,本書の登場です。本書は,とにかく実際にC#を使い倒した著者が本当に必要なことを重点的に解説していますので,いまC#でプログラムを作成している人にも,これから学習したいという人にも有益なものとなっています。C# 3.0により,新しいスタイルで具体的なコードを書く力が養われることを目的とする点が斬新。

こんな方におすすめ

  • C#を使った経験はあるが新しいスタイルを知らない方
  • 実際に仕事でC#を使っている方
  • 実践的なプログラムの書き方を学びたい方

目次

Part 1 C# 3.0――“新しい”プログラミングの可能性

Chapter 1 C# 3.0らしいプログラミングとは?

  • 1.1 意外性あり? 本書で解説すること
  • 1.2 C# 3.0らしいソースコードとは?
  • 1.3 コードの遅延実行という例
  • 1.4 インターフェースとの比較
  • 1.5 後退するクラスの立場
  • 1.6 クラスベースとプロトタイプベース
  • 1.7 クラスベースの問題点
  • 1.8 JavaScriptとの相違点
  • 1.9 まとめ――プログラマーよ,心してかかれ!

Part 2 新しいプログラミングへ――その助走

Chapter 2 ジェネリック

  • 2.1 ジェネリックとは何か?
  • 2.2 新しいコレクションの紹介
  • 2.3 新しいコレクションクラス――LinkedListクラス
  • 2.4 新しいコレクションクラス――SortedDictionaryクラス
  • 2.5 ジェネリックコレクションの使い方
  • 2.6 ジェネリックメソッドと型推論
  • 2.7 HashtableクラスとDictionaryクラスの非互換性
  • 2.8 ジェネリックなクラスを自作する
  • 2.9 制約の付いたジェネリックなクラス
  • Exercise 練習問題

Chapter 3 新しい繰り返しのスタイル――yield return文とForEachメソッド

  • 3.1 「繰り返し」という古くて新しい問題
  • 3.2 数を数えるというサンプル
  • 3.3 C# 1.xによるRangeクラスの実装
  • 3.4 C# 3.0によるRangeクラスの実装
  • 3.5 yield break文による中断
  • 3.6 yieldは予約語ではない
  • 3.7 1つのクラスに複数の列挙機能を付ける
  • 3.8 自動的に作られるオブジェクトと二重利用
  • 3.9 catchできない制約
  • 3.10 制約の真相――見た目と違う真実の姿
  • 3.11 ForEachメソッドを使う別解
  • 3.12 性能比較
  • Exercise 練習問題

Chapter 4 Findメソッド

  • 4.1 MATステートメントの思い出
  • 4.2 ForEachメソッドのbreak問題
  • 4.3 ForEachだけではない繰り返しメソッド
  • 4.4 複数の結果がほしい場合
  • 4.5 偉大なる前進とは何か?
  • 4.6 そして,LINQへ続く
  • Exercise 練習問題

Chapter 5 null許容型

  • 5.1 null許容型とは何か?
  • 5.2 なぜnullを入れたいのか?
  •  null許容型の美学
  •  null許容型の実利
  • 5.3 null許容型の内部構造
  • 5.4 null合体演算子
  • 5.5 is演算子の挙動に注意
  • 5.6 3値論理型として使用できるbool?型
  • 5.7 nullを許容するとパフォーマンスに影響するか?
  • Exercise 練習問題

Part 3 より新しいプログラミングへ

Chapter 6 ラムダ式(前編)

  • 6.1 おかずでもデザートでもなく“ご飯”
  • 6.2 ラムダ式とは何か?
  • 6.3 ラムダ式は上位スコープにアクセスできる
  • 6.4 キャプチャされる変数
  • 6.5 注意を要するキャプチャの本質
  • 6.6 デリゲートの共変性と反変性
  • 6.7 デリゲートインスタンスの等価性
  • 6.8 ラムダ式で継承を置き換えてみる
  • 6.9 C# 2.0と匿名メソッド
  • Exercise 練習問題

Chapter 7 ラムダ式(後編)

  • 7.1 ラムダ式は何をもたらすか?
  • 7.2 ラムダ式と匿名メソッドの違い
  • 7.3 ステートメント型のラムダ
  • 7.4 式形式のラムダの可能性
  • 7.5 型指定を省略できる場合,できない場合
  • 7.6 何もしないラムダ式
  • 7.7 ラムダ式の使用例
  • 7.8 ラムダ式のさまざまなバリエーション
  • 7.9 ジェネリックメソッドと型推論
  • 7.10 オーバーロードの解決
  • Exercise 練習問題

Chapter 8 部分クラスと静的クラス

  • 8.1 部分クラス(Partial Class)
  • 8.2 自動生成コードと安全に共存する
  • 8.3 リフレクションと部分クラス
  • 8.4 部分クラスを使ううえでの注意点
  •  属性
  •  修飾子
  •  型パラメータと制約
  •  基本クラス
  •  基本インターフェース
  •  メンバー
  •  所属する名前空間
  •  名前のバインディング
  • 8.5 静的クラス(Static Class)
  • Exercise 練習問題

Chapter 9 プロパティとアクセシビリティ

  • 9.1 プロパティアクセサのアクセシビリティ
  • 9.2 アクセシビリティ指定の制約
  • Exercise 練習問題

Chapter 10 名前空間のエイリアス修飾子と外部アセンブリ

  • 10.1 バージョンによるコード破壊
  • 10.2 グローバルな名前空間の強制
  • 10.3 アセンブリ間の名前競合の解決
  • Exercise 練習問題

Chapter 11 フレンドアセンブリ

  • 11.1 アセンブリ内部のメンバーへのアクセスを許す
  •  フレンドアセンブリの使い方
  • 11.2 そもそも,アクセスを制限する価値とは?
  • Exercise 練習問題

Chapter 12 varによる変数宣言とコレクション初期化子

  • 12.1 暗黙的に型指定されるローカル変数
  • 12.2 Variant型の悪夢
  • 12.3 暗黙的に型を明示する
  • 12.4 なぜvarを使うのか?
  • 12.5 varが使用できない場面
  •  型を知るためのヒントが何もない
  •  ローカル変数以外
  •  ラムダ式,匿名メソッド
  •  null値の初期化
  • 12.6 varを活用できる場面
  •  usingステートメントで使用するvar
  •  foreachステートメントで使用するvar
  • 12.7 暗黙的に型指定されるローカル配列
  • 12.8 暗黙に型付けされた配列と型の推測
  • 12.9 暗黙に型付けされた配列とnull
  • 12.10 コレクション初期化子
  • 12.11 Dictionaryクラスとコレクション初期化子
  • 12.12 引数が2つのAddメソッドとコレクション初期化子
  • Exercise 練習問題

Chapter 13 自動実装と自動定義

  • 13.1 ラムダ式を使ったダーティテク――refの代役
  • 13.2 自動実装プロパティ
  • 13.3 自動実装プロパティのアクセス制御
  • 13.4 読み出し専用,書き込み専用はない
  • 13.5 “名無し”のクラス――匿名型
  • 13.6 匿名型の等価性
  • 13.7 匿名型の簡易記法
  • 13.8 匿名型の使用目的
  • 13.9 オブジェクト初期化子
  • 13.10 オブジェクト初期化子の本質とは?
  • 13.11 コレクションはreadonlyでも初期化できる
  • 13.12 オブジェクト初期化子の使用例
  • Exercise 練習問題

Chapter 14 拡張メソッド

  • 14.1 C# 2.0プログラマーの悲劇
  • 14.2 Allメソッドを利用するのに必要な記述
  • 14.3 拡張メソッドの概要
  • 14.4 スイッチなしで機能する例
  • 14.5 sealedクラスを拡張する
  • 14.6 拡張メソッドはオブジェクト内部に手出しできない
  • 14.7 拡張メソッドはオブジェクトの振る舞いを変更できない
  • 14.8 拡張メソッドが安全である理由
  • 14.9 メソッド呼び出しと型の関係
  • 14.10 thisの正体
  • 14.11 拡張メソッドを使用すべきとき
  • 14.12 コレクションに拡張されるメソッド
  • 14.13 なぜ「using System.Linq;」なのか?
  • Exercise 練習問題

Part 4 さらに新しい可能性へ

Chapter 15 LINQとクエリ式

  • 15.1 LINQの面白さ
  • 15.2 LINQとは何か?
  • 15.3 「値の集まり」に対する演算
  • 15.4 なぜLINQなのか?
  • 15.5 最も基本的なLINQ
  • 15.6 LINQの本質は列挙
  • 15.7 LINQを使ううえでの注意点
  • 15.8 クエリ結果を加工する
  • 15.9 複数のソースからクエリする
  • 15.10 条件で絞り込む
  • 15.11 一部項目のみselectする
  • 15.12 シンプルなソート
  • 15.13 クエリの接続
  • 15.14 クエリ結果のグループ化
  • 15.15 複数ソースを関連付けるjoin句
  • 15.16 from句とjoin句のパフォーマンス
  • 15.17 join句のグループ化結合
  • 15.18 join句の左外部結合
  • 15.19 単独で使うDefaultIfEmptyメソッド
  • 15.20 内部列挙を伴うfrom句の二重使用
  • 15.21 let句
  • 15.22 クエリのインスタンス化
  • 15.23 クエリ結果の個数を得る
  • 15.24 Anyメソッドと存在チェック
  • 15.25 まとめ――本章の最初のサンプルを通して
  •  列挙できるものはクエリできるもの
  •  ソートやグループ分けができる
  •  複数のソースを処理できる
  •  フィルタリングできる
  •  “結果”を自由に作り出せる
  • Exercise 練習問題

Chapter 16 LINQとメソッド構文

  • 16.1 予約語のエスケープ
  • 16.2 メソッド構文のLINQ
  • 16.3 クエリ式とメソッド構文の違い
  • 16.4 絞り込みと結果の生成
  • 16.5 最初の事例の別解
  • 16.6 メソッド構文でのみ可能なクエリ
  • 16.7 メソッド構文のソート
  • 16.8 orderbyの比較オブジェクト
  • 16.9 メソッド構文の複数のソースからクエリする
  • 16.10 メソッド構文のクエリの接続
  • 16.11 クエリ結果のグループ化
  • 16.12 メソッド構文で複数のソースを関連付ける
  • 16.13 メソッド構文のグループ化結合
  • 16.14 メソッド構文の左外部結合
  • 16.15 メソッド構文のlet句
  • Exercise 練習問題

Chapter 17 LINQ to SQL

  • 17.1 効率的に列挙可能にするという問題
  • 17.2 SQL Serverのワナ
  • 17.3 LINQ to SQLという突破口
  • 17.4 LINQ to SQLのサンプル
  • 17.5 LINQ to SQLとメソッド構文
  • 17.6 LINQ to SQLのまとめ
  • Exercise 練習問題

Chapter 18 LINQ to XML

  • 18.1 LINQプロバイダーを導入する別の理由
  • 18.2 XML最大の災厄
  • 18.3 DOMの憂鬱
  • 18.4 E4XのXMLサポート
  • 18.5 LINQ to XMLというブレークスルー
  • 18.6 単純化されたXML文書生成
  • 18.7 まとめ――ストレスレスなXMLの扱い
  • Exercise 練習問題

Chapter 19 小さな改善とコンパイラの新機能

  • 19.1 インライン警告制御「#pragma warning」
  • 19.2 部分メソッド定義
  • 19.3 固定サイズバッファ
  • 19.4 volatileがIntPtr型およびUIntPtr型へ適用できる
  • Exercise 練習問題

Supplement [補遺]ラムダ式を使用した事例

mini Catalog C# 3.0デザインパターンミニカタログ

  • カスタマイズ可能なメソッド
  • 遅延実行
  • nullデリゲート
  • 判断条件式
  • コンパイル時にチェック可能な名前付きコレクション
  • 汎用雑居クラス
  • getter/setterによる参照
  • 初期化テンプレートオブジェクト
  • フラットオブジェクト
  • フラットオブジェクトファクトリ

Appendix 1 Visual Studio 2005/2008のコンパイラの新機能

A1.1 C# 2.0コンパイラでの変更点

  • /errorreportオプション
  • /incrementalオプションの削除
  • /keycontainerオプションと/keyfileオプション
  • /langversionオプション
  • /linkresourceオプション
  • /moduleassemblynameオプション
  • /pdbオプション
  • /platformオプション

A1.2 C# 3.0コンパイラ用の機能

  • /win32Manifest
  • /noWin32Manifest

Appendix 2 .NET Framework 3.5の新機能――式ツリー

Special Appendix 1 現役C#プログラマーが語るC#を使いこなすツボ

Special Appendix 2 ステート集約プログラミング

おわりに――C# 1.xから3.0への進化とは?

著者プロフィール

川俣晶(かわまたあきら)

1964年4月生まれの東京出身。東京農工大化学工学科卒業。ENIXにてドラゴンクエスト2 MSX/MSX2版移植等のゲームソフト開発を行う。その後,マイクロソフトでMicrosoft Windows 2.1~3.0の日本語化に従事。現在はピーデー代表取締役。日本XMLユーザーグループ代表。過去に経験したプログラム言語はアセンブラ(8080A, Z-80, 6800, x86),BASIC,C言語,C++,Java,C#,JavaScript等。コンピュータの前を離れれば,下高井戸のアマチュア郷土史研究家となり,下高井戸周辺の暗渠や河川跡を探索する。

【主な著書】実践Web2.0論 Web2.0を第二のネットバブルにしないための警告の書/2006年/アスキー刊.実例で学ぶ! [入門と実践] Ajax+XML/2006年/技術評論社刊,パソコンにおける日本語処理・文字コードハンドブック/1999年/技術評論社刊,はじめてのWindowsプログラミング/1993年/ソフトバンククリエイティブ刊,C言語教科書 入門編/2009年/日経BP刊