なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

リフレクションを使って、拡張メソッドを呼び出す

リフレクションで通常のメソッドを呼び出す方法はよく解説されてるけども、
拡張メソッドを呼び出す方法はなかったので、メモメモ。


拡張メソッド、インスタンスメソッドのように呼び出すことができますが、
実態は静的メソッドです。
例えば、下のような拡張メソッドの場合。

void Main()
{
    Console.WriteLine("1".Parse());
}

static class Extensions {
    public static int Parse(this string obj) {
        return int.Parse(obj);
    }
}

静的メソッドなので、このようにして呼び出すことも可能です。

Console.WriteLine(Extensions.Parse("1"));

ということで、通常の静的メソッドを呼び出すようにすれば、リフレクションでも
使うことができます。

こんな感じ。

var obj = "Hello";
var method = typeof(Extensions).GetMethod("Parse", BindingFlags.Public | BindingFlags.Static);
var value = (int) method?.Invoke(null, new object[] {obj});

それだけ。