C#为什么这个反射示例中没有显示私有方法

时间:2017-11-07 06:20:52

标签: c# reflection

我正在学习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

1 个答案:

答案 0 :(得分:1)

The documentation个州(在页面的中间滚动):

  

注意

     

您必须与Public或NonPublic一起指定Instance或Static,否则将不返回任何成员。

Type.GetMethods(BindingFlags)还提到了以下内容:

  
      
  • 您必须指定 BindingFlags.Instance BindingFlags.Static 才能获得回复。

  •   
  • 指定 BindingFlags.NonPublic 以在搜索中包含非公共方法(即私有,内部和受保护方法)。仅返回基类上的受保护和内部方法;不返回基类的私有方法。

  •   

因此,您需要指定 BindingFlags.NonPublicBindingFlags.Instance

MethodInfo[] mi = a.GetMethods(BindingFlags.NonPublic | BindingFlags.Instance);