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
可以作为结果的过滤器。我经常使用这种方法,我知道如何“让它工作”——但我总是问自己,为什么我需要如此具体?谢谢你的回答。