const与readonly常量

                                            const与readonly常量

      const与readonly都是用来定义常量,但是它们有什么区别呢?

      下面我们来简要的说明一下:

      const修饰的常量是编译时常量,如:public const String PI=3.1415;什么是编译时常量,通俗来讲就是指你在声明时,必须要进行赋值(也就是初始化),如果不赋值,编译时会出现说“常量字段要求提供一个值”的异常。

      readonly修饰的是运行时常量,可以在声明中赋值,也可以在构造函数中赋值(注意只能在这两个地方赋值)。

      http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html(这里转载这篇文章),文章中讲的很透彻,但是还是想用自己的话,来更加通俗的描述一遍。

      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来修饰了。

原文地址:https://www.cnblogs.com/qal2767799810/p/4992759.html