What is the difference between const and readonly in C#?(C# 中的 const 和 readonly 有什么区别?)
问题描述
C#中的const
和readonly
有什么区别?
What is the difference between const
and readonly
in C#?
你什么时候会使用其中一个?
When would you use one over the other?
推荐答案
除了明显的区别
- 必须在定义
const
时声明值 VSreadonly
值可以动态计算,但需要在构造函数退出之前分配.. 之后它被冻结了. const
是隐含的static
.您使用ClassName.ConstantName
表示法来访问它们.
- having to declare the value at the time of a definition for a
const
VSreadonly
values can be computed dynamically but need to be assigned before the constructor exits.. after that it is frozen. const
's are implicitlystatic
. You use aClassName.ConstantName
notation to access them.
有细微的差别.考虑在 AssemblyA
中定义的类.
There is a subtle difference. Consider a class defined in AssemblyA
.
public class Const_V_Readonly
{
public const int I_CONST_VALUE = 2;
public readonly int I_RO_VALUE;
public Const_V_Readonly()
{
I_RO_VALUE = 3;
}
}
AssemblyB
引用 AssemblyA
并在代码中使用这些值.编译时:
AssemblyB
references AssemblyA
and uses these values in code. When this is compiled:
- 在
const
值的情况下,它就像一个查找替换.值 2 被烘焙到"AssemblyB
的 IL.这意味着,如果明天我将I_CONST_VALUE
更新为 20,AssemblyB
在我重新编译之前仍然有 2. - 在
readonly
值的情况下,它就像一个ref
到一个内存位置.该值未烘焙到AssemblyB
的 IL.这意味着如果内存位置被更新,AssemblyB
无需重新编译即可获得新值.所以如果I_RO_VALUE
更新到30,只需要构建AssemblyA
,所有客户端都不需要重新编译.
- in the case of the
const
value, it is like a find-replace. The value 2 is 'baked into' theAssemblyB
's IL. This means that if tomorrow I updateI_CONST_VALUE
to 20,AssemblyB
would still have 2 till I recompile it. - in the case of the
readonly
value, it is like aref
to a memory location. The value is not baked intoAssemblyB
's IL. This means that if the memory location is updated,AssemblyB
gets the new value without recompilation. So ifI_RO_VALUE
is updated to 30, you only need to buildAssemblyA
and all clients do not need to be recompiled.
因此,如果您确信常量的值不会改变,请使用 const
.
So if you are confident that the value of the constant won't change, use a const
.
public const int CM_IN_A_METER = 100;
但如果您有一个可能会改变的常量(例如 w.r.t. 精度).. 或者有疑问时,请使用 readonly
.
But if you have a constant that may change (e.g. w.r.t. precision).. or when in doubt, use a readonly
.
public readonly float PI = 3.14;
更新:Aku 需要提及,因为他首先指出了这一点.我还需要插入我学到的地方:Effective C# - Bill Wagner
这篇关于C# 中的 const 和 readonly 有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:C# 中的 const 和 readonly 有什么区别?
基础教程推荐
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- rabbitmq 的 REST API 2022-01-01
- 如何激活MC67中的红灯 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- c# Math.Sqrt 实现 2022-01-01