fieldInfo类中的SetFields方法将对象作为第一个参数。有没有办法在C#中使用反射来改变静态只读字段的值?
到目前为止我已经
了var field = typeof(ClassName).GetField("FieldName",BindingFlags.Instance|BindingFlags.NonPublic);
答案 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);