用Reflection找到一个私人领域?
鉴于这个班级
class Foo
{
// Want to find _bar with reflection
[SomeAttribute]
private string _bar;
public string BigBar
{
get { return this._bar; }
}
}
我想找到私人项目_bar,我将用一个属性标记。 那可能吗?
我已经用属性查找属性,但从来没有私人成员字段。
我需要设置哪些绑定标志来获取私有字段?
使用BindingFlags.NonPublic
和BindingFlags.Instance
标志
FieldInfo[] fields = myType.GetFields(
BindingFlags.NonPublic |
BindingFlags.Instance);
你可以像做一个物业一样做:
FieldInfo fi = typeof(Foo).GetField("_bar", BindingFlags.NonPublic | BindingFlags.Instance);
if (fi.GetCustomAttributes(typeof(SomeAttribute)) != null)
...
使用反射获取私有变量的值:
var _barVariable = typeof(Foo).GetField("_bar", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(objectForFooClass);
使用反射设置私有变量的值:
typeof(Foo).GetField("_bar", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(objectForFoocClass, "newValue");
其中objectForFooClass是类类型Foo的非空实例。
链接地址: http://www.djcxy.com/p/21203.html