鉴于下面的代码,我很惊讶没有抛出异常,并且想知道为什么不.我有一个类,它具有在构造函数中初始化的只读字段.然后我使用反射来获取FieldInfo并调用SetValue方法.这导致否则只读字段是可写的.我的问题是为什么允许这种情况发生?
如果允许这种情况发生,这意味着readonly关键字纯粹用于编译时检查,并且对实际的指令生成几乎没有影响,我想.提前感谢您的见解.
public class SomeType { public readonly int RONumber; public int LocalMember; public SomeType() { RONumber = 32; } } class Program { static void Main(string[] args) { var st = new SomeType { LocalMember = 8 }; var ron1 = st.RONumber; var type = typeof(SomeType); var ronField = type.GetField("RONumber"); ronField.SetValue(st,405); var ron2 = st.RONumber; // ron2 is 405! } }
解决方法
readonly字段告诉编译器阻止您编写将改变该值的代码.如果你使用反射,你可以绕过这些检查,基本上做任何你想做的事情.
注意,这与const字段不同,const字段是编译时常量.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。