C#实战小技巧(五):const与readonly的区别

在C#中,const与readonly定义的值都不能更改,可用于常量的定义,但二者在使用时又存在着一些区别。
1.const
C#使用关键字const声明常量字段或局部变量,C#中的字段是在类或结构中直接声明的变量。以下值类型可以声明为常量:int, long, char, float, double, decimal, bool, byte, short,string。
const定义的常量只能读取不能更改,并且只能在定义时初始化,不能在构造函数、其它属性或方法中初始化。不能将一个常量变量声明为静态变量,因为const定义的字段属于类访问,类似于静态变量,只能通过类名来访问。例如:

public const int EXAMPLE = 1;
Console.WriteLine(ConstTest.EXAMPLE);

另外,const只能定义值类型与字串,若定义引用类型的变量,只能初始化为null。
2.readonly
readonly定义的变量在运行期间也只能读取不能更改,但readonly分为实例只读变量与静态只读变量。可声明的值类型包括:int, long, char, float, double, decimal, bool, byte, short,string。
实例只读变量在定义时或者实例构造函数中初始化,能通过对象访问,例如:

public class ReadOnlyClass
{
    public readonly int temp = 0;
    public ReadOnlyTest()
    {
        temp = 1;
    }
}

访问形式:

ReadOnlyClass example = new ReadOnlyClass ();
Console.WriteLine(example.temp);

static readonly 为静态只读变量,可以在定义时或者静态构造函数中初始化,能通过类名称访问,例如:

public class ReadOnlyClass
{
    public static readonly int TEMP = 1;
}

访问形式:

Console.WriteLine(ReadOnlyClass.TEMP);

3.区别

constreadonly
应用于字段或局部变量。应用于字段。
在公开的时候分配常量字段。可以在声明或构造函数时指定,而不是在任何其他方法中。
没有分配内存,因为在编译后,在IL代码中嵌入了常量值。分配动态内存,可在运行时获取。
默认静态,只能通过类名访问。需要过类实例访问的对象,添加static关键字后,可成为类成员。
值是常量。属于类的对象,根据使用的构造函数,值可能会有所不同。
对某些类(非原始类型)声明常量,应将其赋值为null。声明非基本类型(引用类型)时,只有引用是不可变的,而不是包含的对象。
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mars Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值