拡張メソッド

拡張メソッドとは?

  • 既存の class, interface, struct, enum, プリミティブ型に後付けでメソッドを追加する文法機能。
  • 実態は、第一引数に対象の型をとる静的メソッドを、メンバーメソッドを呼び出す様に書ける糖衣構文 (syntactic sugar)

文法

  • static class の中に、static めそっどを定義して、第1引数の前に this をつける。
  • this を付けた型のメンバーの様に呼び出すことが出来、その場合の引数は第2引数以降。
  • 通常の静的メソッドとしても呼び出すことはできる。
  • 利用する側では対象メソッドを含む static class が有る namespaceusing する必要がある。
    • クラスとメソッドは必ずしも public である必要はなく、利用する側からアクセス可能であればいい。
    • internal を付ければ、同一アセンブリ内からのみ利用可能な拡張メソッドになる。

拡張メソッドの使いドコロ

interface の拡張

  • interface 自身はメソッドを持たないが、ある期待された動作が、全ての実装で共通して実装されているはずである。
  • それを組み合わせた、よく使う処理を、拡張メソッドとして定義して利用する。

すでにある型の、拡張的なプロパティーの実装

  • 拡張メソッドは組み込み方や、システムにすでにある方に対しても、メソッドを追加できる
  • 組み込み型には、思っている状態判定系のメソッドやプロパティーが無かったりする
  • ただし、状態を変化させるものは、少し考えたほうがいいと思われる。
public static class IntPtrExtensions
{
    public static bool IsNull(this IntPtr ptr)
    {
        return ptr == IntPtr.Zero;
    }
}