问题
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();
来源:https://stackoverflow.com/questions/31175769/how-to-get-methods-declared-in-base-class-using-reflection