1

我是 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!
        }
    }
}
4

3 回答 3

2

DeclaredOnly添加到 BindingFlags 标志。

typeof(ClassWithManyMethods).GetMethods(BindingFlags.DeclaredOnly | ...)
于 2013-05-17T13:03:49.380 回答
2

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

BindingFlags.DeclaredOnly
BindingFlags.Public
BindingFlags.Instance

所以:

MethodInfo[] methodInfos = typeof(ClassWithManyMethods)
    .GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
于 2013-05-17T13:08:23.667 回答
0

使用这个重载的GetMethods

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

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

于 2013-05-17T13:03:46.730 回答