さて、LINQプログラミングの第9回
今回は、拡張メソッドについてである。
拡張メソッド
既に存在するクラスに機能を付加する。
var query = any.Where(x => myInclude(x)).Select(x => new { StationName = x });
foreach(var item in query)
{
Console.WriteLine(item.StationName);
}
拡張メソッド(1)
既に存在しているクラス(コンパイル済みのものを含む)に対してメソッドの追加が行える機能である。
たとえば、以下のようなものがある。
using System;
namespace MIC
{
public static class StringExtension
{
// stringに対しての拡張メソッドである
public static string AddABC(this string s)
{
return s + "ABC";
}
}
}
拡張メソッド(2)
使用方法は次のようになる。
using MIC; // MICの拡張メソッドを使用するため
中略
string name = "マイクロソフト";
Console.WriteLine("{0}", name.AddABC());
拡張メソッドの記述方法
作成の条件は次の通り。
- staticメソッドである
- staticクラスに記述されている
- 第一パラメータの先頭にthisキーワードが記述されている
- 第一パラメータの型が追加先となる型である
拡張メソッドの特性
拡張メソッドは以下の特徴がある。
- 拡張メソッドの記述先をusingされなければ拡張されない
- 同じ名前の拡張メソッドをもつ
異なる名前空間を使用するのは不可
例:同名の拡張メソッド「Ex」を持つ名前空間「NS1」と「NS2」を同時には使用できない - usingされるとsealedされたクラスも拡張可能
- 元となる型のprivateやprotectedのメンバにはアクセスできない
- 拡張メソッドは元のクラスの振る舞いは変更できない
追加された拡張メソッド
List<T>のメンバを確認した
⇒実はList<T>ではなく、IEnumerable<T>の拡張メソッド
⇒つまり、これらの拡張メソッドは列挙に対して作用する機能
実装はSystem.Linq.Enumerableクラス
ソースコード内の構文で
F1を押すと簡単にWebのマニュアルを
参照できるので非常に便利である。
今日の名言
人間にとって可能なあらゆる真に健康な楽しみを味わうことは、人間が初めて
この世に創造された時以来、可能であったし今でも可能である。そしてこれらの
楽しみが得られるのは主に心が平安である時である。麦が成長するのを見守る、
畑で鋤や鍬をふるって息を切らす、本を読み、考える、愛する、望む、神に祈る
これらはすべて人間を幸福にする事柄である。時折疲れ果てた王や虐げられた
奴隷が、この世の真の王国がどこにあるのかを見出し、庭の畑の一うねに
無限で真の領土を建設することがある。
ジョン・ラスキン
私の言い方は、行く手を遮る不幸に対してことごとく頭を下げろと主張している
ように聞こえるだろうか?断じてそうではない!それでは単なる運命論ではないか。
事態を好転させるチャンスがある限り闘うべきだ!けれども、常識で判断して
もはや万事休すとなれば、「悪あがきをしたり逆転を望んだりしない」ことが
正気の沙汰というものだ。
デール・カーネギー

