連載:
[完全版]究極の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 まとめ―プログラマーよ、心してかかれ!
(2009/07/31 公開)
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 練習問題
(2009/08/17 公開)
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 練習問題
(2009/08/31 公開)
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 練習問題
(2009/09/24 公開)
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 練習問題
(2009/10/19 公開)
Chapter 7 ラムダ式(後編)
7.1 ラムダ式は何をもたらすか?
7.2 ラムダ式と匿名メソッドの違い
7.3 ステートメント型のラムダ
7.4 式形式のラムダの可能性
7.5 型指定を省略できる場合,できない場合
7.6 何もしないラムダ式
7.7 ラムダ式の使用例
7.8 ラムダ式のさまざまなバリエーション
7.9 ジェネリックメソッドと型推論
7.10 オーバーロードの解決
Exercise 練習問題
(2009/11/02 公開)
Chapter 8 部分クラスと静的クラス
8.1 部分クラス(Partial Class)
8.2 自動生成コードと安全に共存する
8.3 リフレクションと部分クラス
8.4 部分クラスを使ううえでの注意点
  属性
  修飾子
  型パラメータと制約
  基本クラス
  基本インターフェース
  メンバー
  所属する名前空間
  名前のバインディング
8.5 静的クラス(Static Class)
Exercise 練習問題
(2009/11/16 公開)
Chapter 9 プロパティとアクセシビリティ
9.1 プロパティアクセサのアクセシビリティ
9.2 アクセシビリティ指定の制約
Exercise 練習問題
(2009/11/30 公開)
Chapter 10 名前空間のエイリアス修飾子と外部アセンブリ
10.1 バージョンによるコード破壊
10.2 グローバルな名前空間の強制
10.3 アセンブリ間の名前競合の解決
Exercise 練習問題
  (2009/12/14 公開)
Chapter 11 フレンドアセンブリ
11.1 アセンブリ内部のメンバーへのアクセスを許す
フレンドアセンブリの使い方
11.2 そもそも,アクセスを制限する価値とは?
Exercise 練習問題
  (2010/01/18 公開)
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 練習問題
  (2010/02/01 公開)
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 練習問題
  (2010/02/17 公開)
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 練習問題
 
(2010/03/01 公開)
Part 4 さらに新しい可能性へ
Chapter 15 LINはじめにQとクエリ式
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 練習問題
 
(2010/03/17 公開)
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 練習問題
 
(2010/03/29 公開)
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 練習問題
 
(2010/04/14 公開)
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 練習問題
 
(2010/05/06 公開)
Chapter 19 小さな改善とコンパイラの新機能
19.1 インライン警告制御「#pragma warning」
19.2 部分メソッド定義
19.3 固定サイズバッファ
19.4 volatileがIntPtr型およびUIntPtr型へ適用できる
Exercise 練習問題
 
(2010/05/24 公開)
[補遺] ラムダ式を使用した事例
miniCatalog C# 3.0デザインパターンミニカタログ
>>> カスタマイズ可能なメソッド
>>> 遅延実行
>>> nullデリゲート
>>> 判断条件式
>>> コンパイル時にチェック可能な名前付きコレクション
>>> 汎用雑居クラス
>>> getter/setterによる参照
>>> 初期化テンプレートオブジェクト
>>> フラットオブジェクト
>>> フラットオブジェクトファクトリ
 
(2010/06/07 公開)
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の新機能―式ツリー
 
(2010/06/21 公開)
Special Appendix 1 現役C#プログラマーが語るC#を使いこなすツボ
Speciall Appendix 2 ステート集約プログラミング
おわりに C# 1.xから3.0への変化とは?
練習問題解答  

 




Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間