最近在拜读C# in depth这本书,在书中的反射泛型方法这一小节中遇到了一个小问题
class Class1 { internal static void PrintType<T>() { Console.WriteLine(typeof(T)); } } static void main(string args[]) { Type typeClass1 = typeof(Class1); MethodInfo method = typeClass1.GetMethod("PrintType"); MethodInfo contructMethod = method.MakeGenericMethod(typeof(string)); contructMethod.Invoke(null, null); Console.ReadKey(); }
主函数运行后没有输出,并且出现一个Bug:
MethodInfo contructMethod = method.MakeGenericMethod(typeof(string)); 未将对象引用到实例。
经过排查发现是由于PrintType函数的访问权限的问题。
在获取反射泛型方法时,该方法的访问权限必须为public,其他的权限不能让MakeGenericMethod()获取该方法。