c#reflection查找重载方法wr继承

时间:2012-07-18 12:39:19

标签: c# reflection

我试图通过反射找到最适合调用的方法,当我有一个传递给该方法的类型时。

令我担心的边缘情况是使用相同数量的参数进行重载,如下所示:

class UserClass {}
class UserClassB : UserClass {}

class SomeClass {
   void method(object x);
   void method(UserClass x);
}

在运行时我有兴趣调用method,而我手头的类型是UserClassB

最合适的是method(UserClass)

问题在于,当使用typeof(SomeClass).GetMethod("method", new Type[] { typeof(UserClass2) }));时,它将返回null,因为我认为它是根据传递类型的完全匹配进行搜索的。

有什么想法吗?感谢。

1 个答案:

答案 0 :(得分:2)

你错过了绑定标志。 使用可以传递以下标志的重载:
BindingFlags.Instance | BindingFlags.NonPublic

你得到null因为GetMethod会查找公共方法,除非你指定你也想要非公共方法。

var method = typeof(SomeClass).GetMethod("method", BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(UserClass) },null);