gpt4 book ai didi

c# - 未按预期处理只读违规

转载 作者:行者123 更新时间:2023-11-30 12:43:09 25 4
gpt4 key购买 nike

鉴于下面的代码,我很惊讶没有抛出异常并且想知道为什么不抛出。我有一个类,它有一个在构造函数中初始化的 readonly 字段。然后我使用反射获取 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!
}
}

最佳答案

只读字段告诉编译器防止您编写会改变该值的代码。如果你使用反射,你可以绕过这些检查,基本上可以做任何你想做的事。

请注意,这与常量字段不同,常量字段是编译时常量。

关于c# - 未按预期处理只读违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31948116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com