Reflection,MethodInfo,GetMethods,仅包括仅由我添加的方法

时间:2013-05-17 13:01:03

标签: c#

我是C#的新手。

我编写了一个应用程序,它使用反射来遍历所选对象的所有方法并运行它。

问题是MethodInfo[] methodInfos = typeof(ClassWithManyMethods).GetMethods();还会返回ToStringGetType等方法,我想只包含专门为我的类声明的方法。

请查看我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;


namespace Reflection4
{
    class ClassWithManyMethods
    {
    public void a()
    {
        Console.Write('a');
    }

    public void b()
    {
        Console.Write('b');
    }

    public void c()
    {
        Console.Write('c');
    }
}

class Program
{
    static void Main(string[] args)
    {
        // get all public static methods of MyClass type
        MethodInfo[] methodInfos = typeof(ClassWithManyMethods).GetMethods();
        ClassWithManyMethods myObject = new ClassWithManyMethods();

        foreach (MethodInfo methodInfo in methodInfos)
        {
            Console.WriteLine(methodInfo.Name);
            methodInfo.Invoke(myObject, null); //problem here!
        }
    }
}

3 个答案:

答案 0 :(得分:2)

DeclaredOnly添加到BindingFlags标志。

typeof(ClassWithManyMethods).GetMethods(BindingFlags.DeclaredOnly | ...)

答案 1 :(得分:2)

在您的情况下,您需要指定所需的所有绑定标志:

BindingFlags.DeclaredOnly
BindingFlags.Public
BindingFlags.Instance

这样:

MethodInfo[] methodInfos = typeof(ClassWithManyMethods)
    .GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);

答案 2 :(得分:0)

使用此重载GetMethods

var result = typeof(ClassWithManyMethods).GetMethods(BindingFlags.DeclaredOnly);
  

DeclaredOnly指定只在成员级别声明的成员   应考虑提供类型的层次结构。继承的成员是   没考虑。