3

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

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

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) })); 它时会返回一个空值,因为我认为它是根据传递类型的完全匹配进行搜索的。

有任何想法吗?谢谢。

4

1 回答 1

2

您缺少绑定标志。使用可以传递以下标志的重载:
BindingFlags.Instance | BindingFlags.NonPublic

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

var method = typeof(SomeClass).GetMethod("method", BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(UserClass) },null);
于 2012-07-18T12:57:46.083 回答