ReadOnly和Const有什么不同?

4

1
const和readonly的区别是什么? - Eric Lippert
1
以及 https://dev59.com/hXRA5IYBdhLWcg3w_DHF - Eric Lippert
1
当我们何时(如果有必要)应该使用const? - Eric Lippert
1
https://dev59.com/fHRC5IYBdhLWcg3wFdJx - Eric Lippert
@Eric,这类问题的问题在于回答它们比搜索重复问题更容易/更快。但是为寻找重复问题点赞。 - Lucero
Eric是个牛人!他对SOF社区来说是一个很棒的财富!感谢您的服务,Eric。 - Alex Gordon
3个回答

3
不,它们不是相同的东西。
一个“const”字段是内嵌于程序集中的字面值,只有基本类型(字符串和数字)可以是“const”,并且在编译时计算。当您引用一个“const”字段时,编译器会将该字段的字面值内嵌。因此,如果从另一个程序集使用一个“const”,并且另一个程序集的值发生了改变,只有在您针对新版本重新编译后,您的程序集才会使用新值。
而“readonly”字段是一个普通字段,在构造函数之外不能更改。

回答这个问题:http://stackoverflow.com/questions/2624796/initialize-byte-array-from-a-portion-of-existing-byte-array-c - Alex Gordon

3

const无法进行计算,而readonly可以在初始化时进行计算。(例如,您可以从配置文件中读取只读变量的值,或者基于一些在运行时已知的参数来读取该变量的值。常量只能被设置为在编译时已知的值)


1
任何类型的成员都可以是“readonly”。这意味着该成员在包含类构造后不能被重新分配;即它不能用“=”运算符设置为一个新对象。可变类(如集合)仍然可以相对于它们的成员进行修改;只是,如果您有一个作为集合的“readonly”成员,那么在构造之后它不能被分配给一个全新的集合。
“const”与字面量(例如“5”)并没有太大不同:它表示一个不变的值,因此只在指定一个值(而不是一个对象)的情况下才真正有意义。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接