我是C#的新手。
我编写了一个应用程序,它使用反射来遍历所选对象的所有方法并运行它。
问题是MethodInfo[] methodInfos = typeof(ClassWithManyMethods).GetMethods();
还会返回ToString
,GetType
等方法,我想只包含专门为我的类声明的方法。
请查看我的代码:
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!
}
}
}
答案 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指定只在成员级别声明的成员 应考虑提供类型的层次结构。继承的成员是 没考虑。