如何使用反射获取基类中声明的方法?

问题描述 投票:0回答:4

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

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

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

c# .net c#-4.0 reflection windows-store-apps
4个回答
6
投票
GetType().GetRuntimeMethods()

这个方法给出了我想要的。 获取运行时对象内部存在的所有方法。


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

0
投票
    Type type = GetType(); //In this case Type of current class 
    MethodInfo methodInfo = null;
    do
    {
       methodInfo = type.GetMethod(methodName, BindingFlags.Instance | 
       BindingFlags.NonPublic);
       type = type.BaseType;
    } while (methodInfo == null && type != null);

-1
投票

注意

.DeclaredMethods
是类的一个属性。这正在按预期工作。

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

var methodList = base.GetType().GetMethods();
© www.soinside.com 2019 - 2024. All rights reserved.