C#の拡張メソッドとは?
例えば、
"なにがし".IsNullOrEmpty()
で、引数の文字列が「nullまたは空」なら「true」を返すというメソッドがありますが、
都度、 「string.IsNullOrEmpty」 と記述されるのは長ったらしいので、
"なにがし".IsNullOrEmpty()
といった書き方でも同様の処理ができるようにしたい時、拡張メソッドで実現可能です。
上記のように「既存の型」に対して、「新しい機能を追加」できる概念を「拡張メソッド」といいます。
実例
string a = "123";
string b = null;
Console.WriteLine( $"{a.IsNullOrEmpty()}/{b.IsNullOrEmpty()}" );
```shell
> false/true
こんな感じで、文字列の後ろにメソッドを書く感じにします。
やりかた
基本的に 「public staticなクラス」 の中に
「public staticなメソッド」 を作って
「最初の引数の頭にthisというキーワードをつける」 だけでOKです。
実際に書いてみます。
public static class StringUtility
{
public static bool IsNullOrEmpty( this string str )
{
return string.IsNullOrEmpty(str)
}
}
これだけです。
追加した拡張メソッドを使って処理を書くと、以下のようになります。
Console.WriteLine( $"{"ABC".IsNullOrEmpty()} ); // false
string test = null;
Console.WriteLine( $"{test.IsNullOrEmpty()} ); // true
“ABC” も文字列リテラルのstring扱いなので、
(今回のメソッドでは、ほぼ無意味ですが)そのまま拡張メソッドを使用可能です。
まとめ
- 適当な名前の「public static class」を追加
- 「public static」なメソッドに「bool」を返してほしいので、戻り値に「bool」
- 「最初の引数の頭にthis」というキーワードをつける
- あとは、処理を書くだけ
こうする事で、「thisを付けた型」の変数の後ろに「ドット 拡張メソッド名」の形式で呼べるようになります。
ちなみに、「クラス名」「メソッド名」「thisの後ろの型」「thisの後ろの変数名」は任意に付けられますので、
必ず上記サンプルの名前でなくてはならないという事ではない点は、抑えておきましょう。
色々、応用が聞くので自分なりの拡張メソッドで開発を効率化しましょう!