为什么GetMethod需要BindingFlags作为强制信息才能查找方法

本文关键字:信息 查找 方法 需要 GetMethod BindingFlags 为什么 | 更新日期: 2023-09-27 18:00:59

假设我有一个带有私有方法的类:

public class Test
{
    private void Method()
    {
    }
}

这个代码:

var method1 = typeof(Test).GetMethod("Method"); // null
var method2 = typeof(Test).GetMethod("Method", BindingFlags.NonPublic | BindingFlags.Instance); // works!!
var method3 = typeof(Test).GetMethod("Method",BindingFlags.Instance); // null
  1. 为什么method1method3为空

  2. 为什么我必须具体使用BindingFlags才能真正获得该方法
    如果是因为我可以有多个具有相同名称的方法,那么GetMethods的存在是为了什么?

  3. 我需要具体到什么程度?在这种情况下,我需要补充一点,我正在寻找一个非公开的&实例方法。由于不是所有的BindingFlags值都是直接的,我如何知道我需要停在哪里?

为什么GetMethod需要BindingFlags作为强制信息才能查找方法

Private修饰符的意思是"向外部隐藏此方法",因此默认情况下GetMethods((只返回公共成员。

1.method1和method3为null,因为此MSDN链接中特别提到"您必须指定Instance或Static以及Public或NonPublic,否则将不返回任何成员。">

2.对于使用反射,你必须确切地知道你在寻找什么,否则你可能会调用错误的方法。

3.正如我在第一个答案中已经提到的,你至少必须指定"实例或静态以及公共或非公共"。