如何在 C# 中使用反射更改静态只读字段的值?
fieldInfo 类中的 SetFields 方法将对象作为第一个参数。有没有办法在 C# 中使用反射来更改静态只读字段的值?
到目前为止我已经
var field = typeof(ClassName).GetField("FieldName",BindingFlags.Instance|BindingFlags.NonPublic);
The SetFields method in the fieldInfo class takes objects as the first parameter. Is there a way to change the value of the static readonly fields using reflection in C#?
So far I have
var field = typeof(ClassName).GetField("FieldName",BindingFlags.Instance|BindingFlags.NonPublic);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您想获取静态字段,那么您应该使用
BindingFlags.Static
而不是BindingFlags.Instance
,因为后者用于实例字段。然后,您可以使用
field.SetValue(null, newValue)
来设置该值。请注意,null
可以作为目标参数传递,因为不需要对象实例。假设您有足够的权限,反射将很乐意改变只读字段的值。If you want to get a static field then you should be using
BindingFlags.Static
instead ofBindingFlags.Instance
, as the latter is for instance fields.You can then use
field.SetValue(null, newValue)
to set the value. Note thatnull
may be passed as the target parameter, because no object instance is needed. Assuming you have sufficient privileges, reflection will happily change the value of a readonly field.你很接近了。您的 BindingFlag 不正确。
Instance
表示实例字段 相反,您应该使用BindingFlags.Static
:You're close. Your BindingFlag is incorrect.
Instance
means instance field Instead, you should useBindingFlags.Static
: