如何使用c#中的反射更改静态只读字段的值?

时间:2012-01-05 18:12:00

标签: c# reflection readonly

fieldInfo类中的SetFields方法将对象作为第一个参数。有没有办法在C#中使用反射来改变静态只读字段的值?

到目前为止我已经

var field = typeof(ClassName).GetField("FieldName",BindingFlags.Instance|BindingFlags.NonPublic);

2 个答案:

答案 0 :(得分:6)

如果你想获得一个静态字段,那么你应该使用BindingFlags.Static而不是BindingFlags.Instance,因为后者是例如字段。

然后,您可以使用field.SetValue(null, newValue)来设置值。请注意,null可以作为目标参数传递,因为不需要对象实例。假设你有足够的权限,反射将很乐意改变只读字段的值。

答案 1 :(得分:3)

你很亲密。您的BindingFlag不正确。 Instance表示实例字段相反,您应该使用BindingFlags.Static

var field = typeof(ClassName).GetField("FieldName",BindingFlags.Static|BindingFlags.NonPublic);