拡張メソッド
拡張メソッドとは?
- 既存の
class
, interface
, struct
, enum
, プリミティブ型に後付けでメソッドを追加する文法機能。
- 実態は、第一引数に対象の型をとる静的メソッドを、メンバーメソッドを呼び出す様に書ける糖衣構文 (syntactic sugar)
文法
static class
の中に、static
めそっどを定義して、第1引数の前に this
をつける。
this
を付けた型のメンバーの様に呼び出すことが出来、その場合の引数は第2引数以降。
- 通常の静的メソッドとしても呼び出すことはできる。
- 利用する側では対象メソッドを含む
static class
が有る namespace
を using
する必要がある。
- クラスとメソッドは必ずしも
public
である必要はなく、利用する側からアクセス可能であればいい。
internal
を付ければ、同一アセンブリ内からのみ利用可能な拡張メソッドになる。
拡張メソッドの使いドコロ
interface の拡張
interface
自身はメソッドを持たないが、ある期待された動作が、全ての実装で共通して実装されているはずである。
- それを組み合わせた、よく使う処理を、拡張メソッドとして定義して利用する。
すでにある型の、拡張的なプロパティーの実装
- 拡張メソッドは組み込み方や、システムにすでにある方に対しても、メソッドを追加できる
- 組み込み型には、思っている状態判定系のメソッドやプロパティーが無かったりする
- ただし、状態を変化させるものは、少し考えたほうがいいと思われる。
public static class IntPtrExtensions
{
public static bool IsNull(this IntPtr ptr)
{
return ptr == IntPtr.Zero;
}
}