码迷,mamicode.com
首页 > 其他好文 > 详细

const & readonly 关键字

时间:2019-09-10 17:51:55      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:代码   根据   col   relative   public   补充   ocs   str   keyword   

1、使用 const 关键字来声明某个常量字段或常量局部变量。常量字段和常量局部变量不是变量并且不能修改。 常量可以为数字、布尔值、字符串或 null 引用(Constants can be numbers, Boolean values, strings, or a null reference)。

2、不允许在常数声明中使用 static 修饰符。

3、常数可以参与常数表达式,如下所示:

4、readonly 关键字与 const 关键字不同:const 字段只能在该字段的声明中初始化。readonly字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,`readonly` 字段可能具有不同的值。

5、static  如果 static 关键字应用于类,则类的所有成员都必须是静态的。不能通过实例引用静态成员。 然而,可以通过类型名称引用它。

const关键字可以将字段或局部变量声明为常量,其不能被修改。readonly关键字被用来声明只读字段,主要用于字段。两者有一定的相似性,但是也有明显的差异性,所以本文将两者结合在一起来进行说明。我们先来看下面的四段代码片段。

Code1:
private const int FIRST_NUM = 1;
Code2:
private static const int SECOND_NUM = 1;
Code3:
int t = 1;private const int THIRD_NUM = t + 1;
Code4:
private const int FIFTH_NUM = FIRST_NUM + 1;
大家知道哪些代码片段有问题吗?
答案是,代码片段2及代码片段3的做法存在错误。
 
Code2不正确的原因是:
const 默认就是静态的,所以在声明中显式地加上static 关键字的做法明显是错误的。这一点,可以通过查看IL代码来证明,其中Code1对应的IL代码如下:
.field private static literal int32 FIRST_NUM = int32(0x00000001)
很显然,常量FIRST_NUM 默认就是静态的(static )。
那么,readonly字段能不能被设置成静态呢?
做个实验就知道了,代码如下:
private static readonly int firstnum = 1;
编译无错,正常。
到这里,可以得出readonly及const的第一个区别:const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明(区别1)。
Code3不正确的原因是:
const 字段只能在该字段的声明中初始化。不能从一个变量中提取值来初始化常量。这里面更深层次的原因就是:const 字段是编译时常数。在编译时就应该确定其具体值。
那么,readonly字段能不能使用变量来进行初始化呢?
同样使用实验来验证我们的想法,代码如下:
public class ReadOnlyAndConstClass{     private readonly int secondnum;     public ReadOnlyAndConstClass()     {          int t = 1;          secondnum =t +1;     }}
很显然,是可以的,但必须在构造函数中。
这是因为 readonly 是在计算时执行的,当然它可以用某些变量来进行初始化。
到这里,总结出readonly及const的第二个区别:
const 字段是编译时常数,而 readonly 字段可用于运行时常数(区别2)。
当然,我们还能得出另外一个不同点:
const 字段只能在该字段的声明中初始化。readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。这说明不同的实例可以有不同的常量值,所以说,使用readonly来定义不变量更加灵活(其实,这也是readonly的最大特点)(区别3)。
最后,补充最后一点区别:
const对于引用类型的常数,可能的值只能是 string 和 null。而  readonly可以是用于任何类型字段的声明(区别4)。
————————————————
版权声明:本文为CSDN博主「三五月儿」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yl2isoft/article/details/11392777

const & readonly 关键字

标签:代码   根据   col   relative   public   补充   ocs   str   keyword   

原文地址:https://www.cnblogs.com/weilei/p/11498673.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!