有了这个课程

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

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

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

我已经对属性进行了此操作,我在其中查找了属性,但从未查找私有成员字段。

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


当前回答

typeof(MyType).GetField("fieldName", BindingFlags.NonPublic | BindingFlags.Instance)

其他回答

是的,但是你需要设置你的绑定标志来搜索私有字段(如果你在类实例之外寻找成员)。

你需要的绑定标志是:System.Reflection.BindingFlags.NonPublic

在反射私有成员时需要注意的一件事是,如果您的应用程序运行在中等信任环境中(例如,当您运行在共享托管环境中时),它将找不到它们——BindingFlags。非公共选择将被忽略。

使用BindingFlags。NonPublic和BindingFlags。实例的旗帜

FieldInfo[] fields = myType.GetFields(
                         BindingFlags.NonPublic | 
                         BindingFlags.Instance);

我个人就使用这种方法

if (typeof(Foo).GetFields(BindingFlags.NonPublic | BindingFlags.Instance).Any(c => c.GetCustomAttributes(typeof(SomeAttribute), false).Any()))
{ 
    // do stuff
}
typeof(MyType).GetField("fieldName", BindingFlags.NonPublic | BindingFlags.Instance)