const与readonly的区别
1.const
- 用于声明局部常量,在编译时确定值,声明时必须有初始值,且不可以在运行时改变,可读不可写。
- 常量字段默认成为静态字段,不能用static修饰,否则造成编译错误。原因:不需要为每个对象实例都生成一个新的字段实例。
声明常量字段如下:
class ConvertUnits
{
public const float Pi = 3.14F;
public const int Length = 10;
}
2.readonly
- 只能用于声明字段,修饰类的field,不能修饰局部变量,也不能修饰property等其他类成员。声明时,可以不初始化。
- 每个实例的readonly字段的值都可以不同,运行时可改变。可通过构造器来更改为一个新值。
- 可以用static修饰,在运行时计算出值。
声明常量字段如下:
class ConvertUnits
{
public static readonly MyClass myClass = new MyClass(10); //静态可读字段;通过构造函数来改变readonly字段的值
public static int B = 10; //静态字段,可读可写
public static readonly int A = B * 20; //运行时计算值
}
class MyClass
{
private readonly int id { get; set; } //实例可读字段;此处不能用static修饰
public MyClass(int id)
{
this.id = id;//只读字段
}
}
总结:const是编译时常量,readonly是运行时常量;cosnt较高效,readonly较灵活。