C# const和readonly关键字

目录

1.const和readonly是什么?

2.const和readonly的作用是什么?

3.const和readonly的区别是什么?

4.如何使用const和readonly?


1.const和readonly是什么?

定义常量的两个关键字

2.const和readonly的作用是什么?

const:

  1. const关键字限定一个变量不允许被改变
  2. const在一定程度上可以提高程序的安全性和可靠性

readonly:

  1. readonly关键字限定一个变量不允许被改变

3.const和readonly的区别是什么?

  1. const只能定义静态常量,因为它默认是静态的;readonly可以定义静态常量,定义静态常量时需显式加上static关键字,也可以定义实例常量
  2. const定义的是编译时常量;readonly定义的是运行时常量
  3. 由于const定义的是编译时常量,所以在字段声明时必须赋值;而readonly是运行时常量,而且可以定义实例常量,所以readonly的声明和赋值动作可以分开,因此可以将赋值动作延缓到构造函数中
  4. const对于引用类型的常数,可能的值只能是string和null。readonly可以是任何类型
  5. const只能在声明时被赋值一次,之后不能在任何地方更改;而指定字段为readonly时,可以在构造函数中重新初始化;同时指定字段为readonly&static时,还可以在静态初始化器中重新初始化

4.如何使用const和readonly?

const:

private const int constA = 1;
private const string constB = "constB string";
private const string constE = null;
private static int a = 1;
//private const int constF = Program.a + 1;error:The expression Being assigned to 'Program.constF must be constant'
//private static const string constC = "constC string"; error:The constant constC not can be marked static
//private const int constD; error:A const field requires a value be provided

static Program()
{
    const int constG = 1;
}

public static void Main(string[] args)
{
    const int constH = 2;
}

readonly:

class Program
{
    readonly int readonlyA = 1;
    readonly string readonlyB = "readonlyB";
    readonly char readonlyC;
    public Program()
    {
        readonlyC = 'r';
    }

    readonly int readonlyD = new Program().readonlyC + 2;
    static readonly int readonlyF = 1;
    static Program()
    {
        readonlyF = 2;
    }

    public static void Main(string[] args)
    {
        //readonlyF = 3; error:Astatic readonly field cannot be assigned to(except in a static constructor or a variable initializer)
    }
}

5.如何知道const定义的常量是编译时常量,而readonly定义的常量是运行时常量:

①定义一个static readonly常量,一个const常量:

class Program
{
    static readonly string readonlyA = "static readonly";
    const string readonlyB = "const";
}

②将该cs文件编译成IL,因为在IL阶段,readonlyB是编译时常量,所以可以从IL文件中看到readonlyB的赋值情况:

参考:C#关键字之const详解_入秋枫叶的博客-CSDN博客_c# const

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值