const与readonly常量
const与readonly都是用来定义常量,但是它们有什么区别呢?
下面我们来简要的说明一下:
const修饰的常量是编译时常量,如:public const String PI=3.1415;什么是编译时常量,通俗来讲就是指你在声明时,必须要进行赋值(也就是初始化),如果不赋值,编译时会出现说“常量字段要求提供一个值”的异常。
readonly修饰的是运行时常量,可以在声明中赋值,也可以在构造函数中赋值(注意只能在这两个地方赋值)。
C#语言中有两种不同的常量类型,也就是静态常量和动态常量,静态常量是指编译器先对常量进行解析,并将常量的值替换成初始化的那个值(也就是指编译器会传播常量)。例如下面的代码:
class Program { public static void Main(string[] args) { Console.WriteLine("A is {0},B is {1} ", P.A,P. B); Console.ReadKey(); } } class P { public static const int A = B * 10; public static const int B = 10; }
控制台中输出的是A is 100,B is 10,也就是正是上面讲到的先对常量进行解析,然后替换初始化的值。
动态常量是指常量的值在运行的那一个刻才获得,程序在编译期间并未对常量进行解析,所以开始执行时都是默认值,如果是int类型的就是默认为0.如下面的代码:
class Program { public static void Main(string[] args) { Console.WriteLine("A is {0},B is {1} ", P.A,P. B); Console.ReadKey(); } } class P { public static readonly int A = B * 10; public static readonly int B = 10; }
控制台中输出的是A is 0,B is 10.
const与readonly有什么相同的作用呢?
那就是确保两者修饰的常量字段或者是常量局部变量,在后续的项目中不会由于编码操作失误而修改一些固定的值。当然如果是一些常常修改的值就不要用const或者是readonly来修饰了。