連載:[完全版]究極のC#プログラミングChapter14 拡張メソッド川俣 晶2010/03/01 |
|
|
14.12 コレクションに拡張されるメソッド
MSDNのリファレンスでは、拡張メソッドによって実現されたメソッドは、通常のメソッドとは別にまとめられている。コレクションであるList<T>クラスなどのメンバー一覧を見ると、「メソッド」の下に別に「Extensionのメソッド」という項目がある(版が違うと表記が違うかもしれない)。これが拡張メソッドである。
List(T)メンバ
http://msdn.microsoft.com/ja-jp/library/d9hw1as6.aspx
ちなみに、Extensionの訳語は揺れているようで、「拡張」メソッドと表記されることもあれば、このように「Extension」のメソッドと表記されることもある。さらに、IntelliSenseを発動させると「拡張子」と表示されることもあるが、これは誤訳であろう(ちなみに、ファイルの拡張子は英語では「filename extension」なので、文脈を考えずに単語単位で訳しての誤訳であろう)。
さて、ここではList<T>クラスを例にして、どのようなメソッドが拡張されているか見てみよう(ほかのコレクションのクラスも同様に拡張されている)。
まず、これらのメソッドの多くは、実はList<T>クラスに対して拡張されて“いない”ことに着目しよう。実際には、List<T>クラスが実装しているIEnumerable<T>インターフェースに対する拡張として定義されている。拡張メソッドの実装そのものは、System.Linq.Enumerableクラスに存在する。
この事実は、実はLINQが「コレクション」ではなく「列挙」に対して作用する機能であることを示しているが、これはLINQを解説する際にあらためて取り上げよう。
さて、以上のような前提を踏まえて、List<T>クラスの拡張メソッドの一覧を見ていこう(次ページ表14.2参照)。
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
表14.2 List<T>クラスの拡張メソッド一覧 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
INDEX | ||
[完全版]究極のC#プログラミング | ||
Chapter14 拡張メソッド | 1.14.1 C# 2.0プログラマーの悲劇 | |
2.14.2 Allメソッドを利用するのに必要な記述 | ||
3.14.3 拡張メソッドの概要 | ||
4.14.4 スイッチなしで機能する例 | ||
5.14.5 sealedクラスを拡張する | ||
6.14.6 拡張メソッドはオブジェクト内部に手出しできない | ||
7.14.7 拡張メソッドはオブジェクトの振る舞いを変更できない | ||
8.14.8 拡張メソッドが安全である理由 | ||
9.14.9 メソッド呼び出しと型の関係 | ||
10.14.10 thisの正体 | ||
11.14.11 拡張メソッドを使用すべきとき | ||
12.14.12 コレクションに拡張されるメソッド | ||
13.14.13 なぜ「using System.Linq;」なのか?/練習問題 | ||
「[完全版]究極のC#プログラミング」 |
- 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|