C# 为什么GetMethod需要BindingFlags作为查找方法的必需信息?

C# 为什么GetMethod需要BindingFlags作为查找方法的必需信息?,c#,reflection,C#,Reflection,假设我有一个带有私有方法的类: 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 m

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

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
  • 为什么
    method1
    method3
    为空?

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

  • 我需要有多具体?在本例中,我需要补充一点,我正在寻找一个非公共的实例方法。由于并非所有的
    BindingFlags
    值都是直接的,我如何知道我需要停在哪里


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

    1.method1和method3为空,因为在中特别提到“必须指定实例或静态以及公共或非公共,否则将不返回任何成员。”

    2.要使用反射,您必须准确地知道您要查找的内容,否则可能会调用错误的方法


    3.正如我在第1号答案中已经提到的,您必须至少指定“实例或静态以及公共或非公共”。

    方法
    方法
    是私有的,因此您必须包括
    非公共
    。默认值为
    Public | Static | Instance
    @Bjørn RogerKringsjå-
    var method=typeof(Test).GetMethod(“method”,BindingFlags.NonPublic)也为空。我需要补充的是,该方法也是一个实例方法,以便获取methodinfo。如果不使用默认值,则必须指定枚举的所有值。默认情况下,包括静态或实例方法的公共方法。如果指定参数,则必须指定是包含公共方法还是静态方法,如果不包含,则两种方法都没有。当然,还需要
    实例
    标志。确定-但为什么需要添加该信息?我希望
    GetMethod
    返回第一个匹配项,而
    GetMethods
    返回一组匹配项。我还希望
    BindingFlags
    可以作为结果的过滤器。我经常使用这种方法,我知道如何“让它工作”——但我总是问自己,为什么我需要如此具体?谢谢你的回答。