想在一个类中获取另一个类的私有方法,我是利用反射来做的,其中有些许疑问想不明白,想请教各位:
public class TypeParse { private int Add() { return 2 + 1; } public void Adds() { } public int Num { get; set; } public string Name { get; set; } } public class person { /// <summary> /// 反射获取方法属性 /// </summary> public static void GetMethod() { TypeParse objects = new TypeParse(); System.Reflection.MethodInfo mInfo = typeof(TypeParse).GetMethod("Add", System.Reflection.BindingFlags.NonPublic
| System.Reflection.BindingFlags.Instance); } }
我这样写能正常获取到类中的私有方法,但是,我把
System.Reflection.MethodInfo mInfo = typeof(TypeParse).GetMethod("Add",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
修改成:
System.Reflection.MethodInfo mInfo = typeof(TypeParse).GetMethod("Add",
System.Reflection.BindingFlags.NonPublic);
这样我就没有办法获取到类中的私有方法了,这到底是为什么呢?我指定了位屏蔽的搜索标志位NonPublic,
为什么我不指定位屏蔽的搜索标志位Instance就检索不到类中的方法呢?这到底是为什么,请各位不吝赐教,谢谢!
需要指定 BindingFlags.Instance 来获取实例方法,你的Add方法是实例方法,如果没有这个标记位,那么只会搜索静态方法,所以没有找到你要的方法。
我试过了啊,我把私有方法改成静态的,还是搜索不到,也必须要指定System.Reflection.BindingFlags.Static才能搜索到静态方法
@ljcheibao: 我的意思是,你如果一个都不指定,直接用.GetMethod("Add"),那么相当于默认指定了:
BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance
如果你要手动指定,那么就得指定全了.去看下Type.GetMethod方法的代码就知道了。
@水牛刀刀:
TypeParse objects = new TypeParse();
System.Reflection.MethodInfo mInfo = typeof(TypeParse).GetMethod("Add", System.Reflection.BindingFlags.NonPublic);
我这样不是已经指定查找的是非公用的Add方法了吗,为什么搜索不到,还必须要加上BindingFlags.Instance才搜索得到,求解,谢谢!
Add 这个方法是 私有的实例方法(
System.Reflection.BindingFlags.Instance
)