だらだらやるよ。

こげつのIT技術メモ

C#3.0機能紹介その2。拡張メソッド

RubyのMix-in的な感じなのかな、定義方法はだいぶ違うけど。
既存のインスタンスにメソッドを追加できます。
以下のようにクラスとメソッドを定義

static class StaticMethods
{
    static public void ShowMessageBox(this string s) {
        MessageBox.Show(s,"title",MessageBoxButtons.OK,MessageBoxIcon.Information);
    }
}

仮引数の前に書いてあるthisがポイント、これで拡張メソッドが使用できるようになりました。
thisキーワードがついた型のインスタンスメソッドとして扱えます。
プロジェクトから見える状態にして、usingしてあげたら準備完了。
使用するときはこんな感じに。

StaticMethods.ShowMessageBox("test1");
"test2".ShowMessageBox();

ちょっと気になるのは、スコープにはいってたら自動的に使えるようになるところ。
拡張メソッド用のモジュールクラスみたいなのをきちんとネームスペースをつくって運用したいかなぁ