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

あなたの場合、必要なすべてのバインディング フラグを指定する必要があります。

BindingFlags.DeclaredOnly
BindingFlags.Public
BindingFlags.Instance

それで:

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