拡張メソッドとは
MicrosoftのC#のプログラミングガイドには次のように書いている
新規の派生型の作成、再コンパイル、または元の型の変更を行うことなく既存の型にメソッドを "追加" できます。
拡張メソッドは特別な種類の静的メソッドですが、拡張された型のインスタンス メソッドのように呼び出します。
拡張メソッドを使用すると既存の型に変更を加えることはなく型にメソッドを追加できるとのこと。
拡張された型のインスタンスメソッドのように呼び出せるのでわざわざ引数に渡さなくて良くて楽。
使う
例えばstringに"Hoge"と加えた文字列を返す拡張関数を作るとすると以下のようになる
public static class MyStringExtensions
{
public static string AddHoge(this string str)
{
return str + "Hoge";
}
}
クラスとメソッドはstaticにしておき、メソッドの引数にはthisをつける。
すると以下のように使用することができる。
string word = "word";
word = word.AddHoge();
System.Console.Write(word);
・結果
wordHoge
enumにも使える
Javaならenumにメソッドを追加できて非常に便利。
C#ではそれはできないけど拡張メソッドを使用すれば似たようなことはできる
Enumの値をToStringしたものにドットを付けたstringを返す例
public enum SampleEnum {
Hoge,
Fuga,
Piyo,
}
public static class SampleEnumExtensions
{
public static string AddDot(this SampleEnum e) {
return e.ToString() + ".";
}
}
SampleEnum e = SampleEnum.Fuga;
System.Console.Write(e.AddDot());
・結果
Fuga.