目录
1.const和readonly是什么?
定义常量的两个关键字
2.const和readonly的作用是什么?
const:
- const关键字限定一个变量不允许被改变
- const在一定程度上可以提高程序的安全性和可靠性
readonly:
- readonly关键字限定一个变量不允许被改变
3.const和readonly的区别是什么?
- const只能定义静态常量,因为它默认是静态的;readonly可以定义静态常量,定义静态常量时需显式加上static关键字,也可以定义实例常量
- const定义的是编译时常量;readonly定义的是运行时常量
- 由于const定义的是编译时常量,所以在字段声明时必须赋值;而readonly是运行时常量,而且可以定义实例常量,所以readonly的声明和赋值动作可以分开,因此可以将赋值动作延缓到构造函数中
- const对于引用类型的常数,可能的值只能是string和null。readonly可以是任何类型
- 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的赋值情况:
![]()

2057

被折叠的 条评论
为什么被折叠?



