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

发布于 2024-12-25 09:10:47 字数 212 浏览 1 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

神爱温柔 2025-01-01 09:10:48

如果您想获取静态字段,那么您应该使用 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 of BindingFlags.Instance, as the latter is for instance fields.

You can then use field.SetValue(null, newValue) to set the value. Note that null 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.

往日情怀 2025-01-01 09:10:48

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

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

You're close. Your BindingFlag is incorrect. Instance means instance field Instead, you should use BindingFlags.Static:

var field = typeof(ClassName).GetField("FieldName",BindingFlags.Static|BindingFlags.NonPublic);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文