在执行代码之前,了解 C# 编程的概念非常重要。在了解 const 和 readonly 的区别之前,我们先来了解一下这两个关键字以及它们在程序中的用法。这两个关键字都是 C# 编程中最常用的关键字,其作用基本相同。但是,这两个关键字又有很大的不同。Const 是一个保留字,用于表示常量值,它规定在编译后不能修改值,而 readonly 是一个修饰符,可用于字段,其值可在运行时更改。下面来看看 const 和 readonly 之间的一些主要区别。

什么是常量?

Const 指的是常量变量,其值只需在声明时分配一次。在声明过程中使用关键字 const 时,它将成为一个常量,这意味着其值在整个程序中保持不变,不能更改。它更像是一个保留字,用于指定在编译后不得修改的值。默认情况下,常量是隐式静态的,因此可以使用”Classname.VariableName”(类名.变量名)来调用它。常量值也称为字面量。它可以是任何基本数据类型,如整数常量、浮点常量或字符串字面量。

什么是只读?

只读关键字是一种修饰符,只能用于字段,不能用于局部变量。只读字段可以在声明时初始化,也可以在同一类中的构造函数中初始化,因此程序的不同执行过程中的值可能会因构造函数的不同而不同。readonly 关键字指定对象的实例变量不可修改,任何在声明后修改该变量的尝试都会导致编译错误。变量在执行后才会变成不可修改。将变量设置为只读,只是为了防止调用代码时意外修改构造后的变量。

常量与只读的区别

基本
常量(const)关键字只是不可变的变量,其值只能在编译时初始化。这些常量值也被称为字面量。它只是允许我们指定变量是否可修改。简单地说,常量是隐式静态的,在程序中使用前应先对其进行初始化。只读关键字是一种修饰符,可用于字段,其值可在运行时更改。它可以防止字段被更改,其值可以通过引用变量设置。

初始化
常量默认为静态变量,其值应在变量声明时分配,即仅在编译时分配。常量使用”const”关键字声明。常量字段的初始化必须是一个常量表达式,且不得修改。简单地说,const 是一个编译时常量。只读字段只能在类级别初始化,而不能在方法内部初始化,并且在初始化后不能修改字段。换句话说,只读变量可以在声明时初始化,也可以在构造函数中初始化。

内存分配
常量值作为编译时替换变量,会被直接放入代码中。编译器会将常量值放在定义常量的汇编元数据中,并在初始化后将其嵌入 IL 代码本身,因此运行时不需要为常量分配内存。只读值不是常量,它存储在加载器堆中,在加载其类型之前无法为其分配内存。只读字段存储在动态内存中,因此只能在运行时获取其值。

二进制版本控制
虽然这两个关键字的用途几乎相同,但它们的二进制版本语义却不同。当表达式引用常量时,编译器会在编译时嵌入该值。如果在不同的程序集中使用该值,则需要更新原始程序集并更改值。在重新编译之前,程序集中的变化不会被反映出来。当表达式引用只读字段时,该值要到运行时才能获得。如果在不同的程序集中更改了值,则在加载程序集后,无需重新编译,即可立即在程序集中反映更改。

常量和只读的对比总结

这两个关键字的作用是一样的,都是为了声明一个成员,使其值在整个程序中无法更改。但是,const 关键字与 readonly 关键字截然不同。Const 是一个常量变量,其值应在编译时初始化,而 readonly 字段只能在类级别初始化,可以在声明时初始化,也可以在构造函数中初始化。Const 是编译时常量,而只读字段是只读的。使用”Classname.VariableName”可以访问常量变量,而使用”InstanceName.VariableName”可以访问只读变量。const 变量可以在方法中声明,而只读字段不能在方法中声明。

常量和只读的区别

本文由网友:罗启恒 投稿 欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果。
转载请注明:文章转载自 有区别网 [http://www.vsdiffer.com]
本文标题:常量和只读的区别
本文链接:https://www.vsdiffer.com/vs/constant-vs-readonly.html
免责声明:以上内容仅代表 网友:罗启恒 个人看法、理解、学习笔记、总结和研究收藏。不保证其正确性,因使用而带来的风险与本站无关!如本网站内容冒犯了您的权益,请联系站长,邮箱: ,我们核实并会尽快处理。