用Reflection找到一个私人领域?

鉴于这个班级

class Foo
{
    // Want to find _bar with reflection
    [SomeAttribute]
    private string _bar;

    public string BigBar
    {
        get { return this._bar; }
    }
}

我想找到私人项目_bar,我将用一个属性标记。 那可能吗?

我已经用属性查找属性,但从来没有私人成员字段。

我需要设置哪些绑定标志来获取私有字段?


使用BindingFlags.NonPublicBindingFlags.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

上一篇: Find a private field with Reflection?

下一篇: Joining two lists together