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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/WZh0316/article/details/81231668

在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.区别

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

猜你喜欢

转载自blog.csdn.net/WZh0316/article/details/81231668
今日推荐