我试图通过反射找到最适合调用的方法,当我有一个传递给该方法的类型时。
令我担心的边缘情况是使用相同数量的参数进行重载,如下所示:
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,因为我认为它是根据传递类型的完全匹配进行搜索的。
有什么想法吗?感谢。
答案 0 :(得分:2)
你错过了绑定标志。
使用可以传递以下标志的重载:
BindingFlags.Instance | BindingFlags.NonPublic
你得到null因为GetMethod会查找公共方法,除非你指定你也想要非公共方法。
var method = typeof(SomeClass).GetMethod("method", BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(UserClass) },null);