gpt4 book ai didi

c# - 在 .NET 中,为什么常量在编译时而不是在 JIT 时求值?

转载 作者:可可西里 更新时间:2023-11-01 08:02:46 26 4
gpt4 key购买 nike

今天,当我更改静态类中公开可见常量的值,然后用新编译的版本替换程序集的旧副本时,我有点吃惊。令人惊讶的是,引用程序集的现有程序没有获取常量的新值。也就是说,我没有重新编译可执行文件,而是只是替换了那个程序集。

我的实验的完整描述位于 How constant is a constant?

我承认我对这种行为感到非常惊讶。我明白发生了什么,但我不明白为什么。是否有特殊的技术原因导致无法在 JIT 时间而不是编译时间获取常量?在某些情况下这样做会破坏事情吗?

最佳答案

常量应该是常量。对于所有时间。常量是诸如 pi 的值或铅原子中的质子数之类的东西。

如果你的常量发生变化,它并不是真正的常量;请改用只读字段。

另请参阅框架设计指南,其中规定:

Use constant fields for constants that will never change. The compiler burns the values of const fields directly into calling code. Therefore const values can never be changed without the risk of breaking compatibility.

本质上,在不重新编译依赖于它的所有内容的情况下更改常量就像在不重新编译依赖于它的所有内容的情况下更改方法的签名一样糟糕。当编译器编译依赖程序集时,编译器“融入”了关于来自引用程序集的元数据信息的各种假设。如果您进行任何更改,您不能指望事情会继续有效。

关于c# - 在 .NET 中,为什么常量在编译时而不是在 JIT 时求值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4414228/

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