読者です 読者をやめる 読者になる 読者になる

みかづきメモ

学習したことのメモとか、日記とか、備忘録。

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

C#

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


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

// @ a.linq
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});

それだけ。