0

假设我有这样的课程:

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?

4

0 回答 0