为了账号安全,请及时绑定邮箱和手机立即绑定

我可以使用反射更改C#中的私有只读字段吗?

我可以使用反射更改C#中的私有只读字段吗?

慕侠2389804 2019-07-20 10:21:59
我可以使用反射更改C#中的私有只读字段吗?我想知道,由于很多事情都可以使用反射来完成,所以在构造函数完成它的执行之后,我可以更改私有只读字段吗?(注意:只是好奇)public class Foo{ private readonly int bar; public Foo(int num) {  bar = num; } public int GetBar() {  return bar; }}Foo foo = new Foo(123);Console.WriteLine(foo.GetBar()); // display 123// reflection code here...Console.WriteLine(foo.GetBar()); // display 456
查看完整描述

3 回答

?
墨色风雨

TA贡献1853条经验 获得超6个赞

你可以:

typeof(Foo)
   .GetField("bar",BindingFlags.Instance|BindingFlags.NonPublic)
   .SetValue(foo,567);


查看完整回答
反对 回复 2019-07-20
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

我同意其他答案,因为它有效。一般特别是与E.Lippert的评论,这不是记录的行为,因此不是未来的证明代码。

然而,我们也注意到了另一个问题。如果在权限受限的环境中运行代码,则可能会出现异常。

我们刚刚遇到了一种情况,我们的代码在机器上正常工作,但是我们收到了一个VerificationException当代码在受限的环境中运行时。罪魁祸首是对只读字段设置者的反射调用。当我们移除那个字段的只读限制时,它就起了作用。


查看完整回答
反对 回复 2019-07-20
  • 3 回答
  • 0 关注
  • 753 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信