如何从类中获取私有静态字段的值?

时间:2009-03-10 02:00:09

标签: c# reflection

有没有办法通过反射从已知类中获取私有静态字段的值?

5 个答案:

答案 0 :(得分:66)

Type type = typeof(TheClass);
FieldInfo info = type.GetField(name, BindingFlags.NonPublic | BindingFlags.Static);
object value = info.GetValue(null);

这是一个字段。对于媒体资源,请将type.GetField更改为type.GetProperty。您也可以以类似的方式访问私有方法。

答案 1 :(得分:5)

我想有人应该问这是不是一个好主意?它创建了对此静态类的私有实现的依赖。私有实施可能会发生变化,而不会通知使用Reflection访问私有实施的人。

如果两个类要一起工作,请考虑使用 internal 字段并在[assembly:InternalsVisibleTo]属性中添加协作类的程序集。

答案 2 :(得分:2)

如上所述,您可以将System.Type::GetMembers()BindingFlags ::NonPublic | BindingFlags::Static一起使用,但前提是您拥有ReflectionPermission权利。

答案 3 :(得分:0)

如果您完全信任,您应该能够:

Type t = typeof(TheClass);
FieldInfo field = t.GetField("myFieldName", BindingFlags.NonPublic | BindingFlags.Static);
object fieldValue = field.GetValue(myObject);

但是,如果在没有完全信任的系统上运行此命令,GetField调用将失败,这将无效。

答案 4 :(得分:-1)

尝试这样的事情:

Type type = typeof(MyClass);
MemberInfo[] members = type.GetMembers(BindingFlags.NonPublic | BindingFlags.Static);

我认为这应该有用。