可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am trying to invoke methods using Reflection in Windwos 8 store application. I tried to get list of all methods from a base class method using this.GetType().GetTypeInfo().DeclaredMethods.
var methodList = base.GetType().GetTypeInfo().DeclaredMethods;
I am able to get all methods declared in the child class and invoke them. But i am unable to get list of methods defined in the base class.
what is wrong with the approach? this project built using .Net for Windows store
回答1:
GetType().GetRuntimeMethods()
This method gave what i wanted. Got all the methods present inside the object during runtime.
回答2:
You have to do it manually:
public static class TypeInfoEx { public static MethodInfo[] GetMethods(this TypeInfo type) { var methods = new List<MethodInfo>(); while (true) { methods.AddRange(type.DeclaredMethods); Type type2 = type.BaseType; if (type2 == null) { break; } type = type2.GetTypeInfo(); } return methods.ToArray(); } }
and then
Type type = typeof(List<int>); TypeInfo typeInfo = type.GetTypeInfo(); MethodInfo[] methods = typeInfo.GetMethods();
回答3:
Notice that .DeclaredMethods
is a property on the class. This is working as intended.
The code you want (I think) is
var methodList = base.GetType().GetMethods();