泛型类的Module.ResolveMember行为

时间:2018-09-24 11:06:49

标签: c#

我不了解具有通用参数的成员的Module.ResolveMember行为。根据下面的文档代码,应该可以使用,但是出于某种原因,fooMember.DeclaringType不能使用bool类型进行参数化。

class A<T> where T:new()
{
    T a;
    public void foo()
    {
        a = new T();
    }
}
class B:A<bool>
{ }
class Program
{
    static void Main(string[] args)
    {
        var test = new B();
        var aType = test.GetType().BaseType;
        var token = aType.GetMember("foo").First().MetadataToken;
        var fooMember = aType.Module.ResolveMember(token, aType.GetGenericArguments(), null);
        Debug.Assert(aType == fooMember.DeclaringType);
        Console.ReadKey();
    }
}

为什么不起作用?

1 个答案:

答案 0 :(得分:2)

结果证明ResolveMethod(Int32, Type[], Type[])需要methodref令牌,对于泛型方法,我们对不同的泛型参数有不同的methodrefs。 ResolveMethod应该用于获取基于编译相关信息的方法,而不是解析通用方法信息。