假设我有这样的课程:
public class MyTestClass<T>
{
public void DoSomething(object o)
{
Logger.Debug("Non-generic version called.");
}
public void DoSomething(T o)
{
Logger.Debug("Generic version called.");
}
public void DoOtherThing(object o)
{
Logger.Debug("DoOtherThing called.");
}
}
如果我创建一个类型为:MyTestClass<Object> 的实例,我可以使用以下代码获取“DoOtherThing”方法:
var t = typeof(MyTestClass<object>);
var doOtherThingMethod = t.GetMethod("DoOtherThing");
但是有两个名为“DoSomeThing”的方法,<strong>如何使用反射调用它的泛型版本?
为了清楚地描述我的问题,我举了下面的例子。
public void TestGenericClass()
{
var o = new MyTestClass<object>();
var t = o.GetType();
var methodInfos = t.GetMethods();
//GetMethod will throw System.Reflection.AmbiguousMatchException here: Ambiguous matching in method resolution.
var m = t.GetMethod("DoSomething");
//there are two MethodInfo in methods.
var methods = t.GetMethods("DoSomething");
var m1 = methods[0];
var m2 = methods[1];
}
问题是,哪个是使用泛型类型的方法,m1 还是 m2?