拡張メソッド

拡張メソッド - C# によるプログラミング入門 | ++C++; // 未確認飛行 C


静的メソッドをオブジェクトのメソッドと同じ形式で呼び出せるようにできるものらしいです。

まずは普通に書いた場合の処理を見てみます。

using System;

class CClass {
    public string str;
}

static class Foo  {
    public static void Output (CClass cobj) {
        Console.WriteLine( cobj.str );
    }
}

class Program {
    static void Main() {
        var cobj = new CClass { str = "hoge" };
        
        // 静的メソッドにcobjを渡して出力する
        Foo.Output(cobj);
    }
}
$ main
hoge

何の変哲もないFoo.Outputという静的メソッドにcobj変数を渡してるだけですね。

このFoo.Outputをあたかもcobj変数のオブジェクトメソッドの様に呼べるようにすることができるわけです。

using System;

class CClass {
    public string str;
}

static class Foo  {
    // 引数の受け取りにthisキーワードを指定するだけ
    public static void Output (this CClass cobj) {
        Console.WriteLine( cobj.str );
    }
}

class Program {
    static void Main() {
        var cobj = new CClass { str = "hoge" };
        
        // あたかもオブジェクトのメソッドかのように呼べる
        cobj.Output();
    }
}
$ main
hoge

凄いですね。ただしこの機能はどこでメソッドが定義されているのかわかりにくい点や、その他色々注意点が多いので乱用が禁物らしいです。

詳しくはURL参照ですね。