如何使用Reflection获取在Base类中声明的方法?

时间:2015-07-02 04:46:27

标签: c# .net c#-4.0 reflection windows-store-apps

我试图在Windwos 8商店应用程序中使用Reflection调用方法。我尝试使用this.GetType()从基类方法获取所有方法的列表.GetTypeInfo()。DeclaredMethods。

var methodList = base.GetType().GetTypeInfo().DeclaredMethods;

我能够得到所有 在子类中声明的方法并调用它们。但我无法获得基类中定义的方法列表 这种方法有什么问题? 这个项目使用.Net for Windows商店构建

3 个答案:

答案 0 :(得分:4)

GetType().GetRuntimeMethods()

这种方法给了我想要的东西。 在运行时期间获得对象内的所有方法。

答案 1 :(得分:1)

你必须手动完成:

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();
    }
}

然后

Type type = typeof(List<int>);
TypeInfo typeInfo = type.GetTypeInfo();
MethodInfo[] methods = typeInfo.GetMethods();

答案 2 :(得分:-1)

请注意.DeclaredMethods是该类的属性。这是按预期工作的。

您想要的代码(我认为)是

var methodList = base.GetType().GetMethods();