我正在学习C#并尝试了一个简单的反射示例。我试图从类中获取方法的名称。这是代码:
using System;
using System.Reflection;
namespace Practice
{
class ReflectionExamples
{
private int Sum(int a, int b)
{
return a + b;
}
public int GetSum(int a, int b)
{
int c = Sum(a, b);
return c;
}
}
class ReflectionDemo
{
public static void Execute() // Main calls this
{
var a = typeof(ReflectionExamples);
MethodInfo[] mi = a.GetMethods(); //Using BindingFlags.NonPublic does not show any results
foreach (MethodInfo m in mi)
{
Console.WriteLine(m.Name);
}
}
}
}
此输出为(缺少Sum):
GetNum
ToString
Equals
GetHashCode
GetType
答案 0 :(得分:1)
The documentation个州(在页面的中间滚动):
注意强>
您必须与Public或NonPublic一起指定Instance或Static,否则将不返回任何成员。
Type.GetMethods(BindingFlags)
还提到了以下内容:
您必须指定 BindingFlags.Instance 或 BindingFlags.Static 才能获得回复。
指定 BindingFlags.NonPublic 以在搜索中包含非公共方法(即私有,内部和受保护方法)。仅返回基类上的受保护和内部方法;不返回基类的私有方法。
因此,您需要指定 BindingFlags.NonPublic
和BindingFlags.Instance
:
MethodInfo[] mi = a.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance);