我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。 1. static readonly MyClass myins = new MyClass(); 2. static readonly MyClass myins = null; 3. static readonly A = B * 20; static readonly B = 10; 4. static readonly int [] constIntArray = new int[] {1, 2, 3}; 5. void SomeFunction() { const int a = 10; ... } 1:不可以换成const。new操作符是需要执行构造函数的,所以无法在编译期间确定
因此,对于那些本质上应该是常量,但是却无法使用const来声明的地方,可以使用static readonly。 例如C#规范中给出的例子: static readonly需要注意的一个问题是,对于一个static readonly的Reference类型,只是被限定不能进行赋值(写)操作而已。而对其成员的读写仍然是不受限制的。 但是,如果上例中的MyClass不是一个class而是一个struct,那么后面的两个语句就都会出错。
Const 和 static readonly的区别: 1 using System; 2 class P 3 { 4 static readonly int A=B*10; 5 static readonly int B=10; 6 public static void Main(string[] args) 7 { 8 Console.WriteLine("A is {0},B is {1} ",A,B); 9 } 10 } 对于上述代码,输出结果是多少?很多人会认为是A is 100,B is 10吧!其实,正确的输出结果是A is 0,B is 10。
好吧,如果改成下面的话:using System; 1 class P 2 { 3 const int A=B*10; 4 const int B=10; 5 public static void Main(string[] args) 6 { 7 Console.WriteLine("A is {0},B is {1} ",A,B); 8 } 9 10 } 对于上述代码,输出结果又是多少呢?难道是A is 0,B is 10?其实又错了,这次正确的输出结果是A is 100,B is [转]C# const和static readonly区别我们都知道,const和static readonly的确很像:通过类名而不是对象名进行访问,在程序中只读等等。在多数情况下可以混用。 1. static readonly MyClass myins = new MyClass(); 2. static readonly MyClass myins = null; 3. static readonly A = B * 20; static readonly B = 10; 4. static readonly int [] constIntArray = new int[] {1, 2, 3}; 5. void SomeFunction() { const int a = 10; ... } 1:不可以换成const。new操作符是需要执行构造函数的,所以无法在编译期间确定
因此,对于那些本质上应该是常量,但是却无法使用const来声明的地方,可以使用static readonly。 例如C#规范中给出的例子: static readonly需要注意的一个问题是,对于一个static readonly的Reference类型,只是被限定不能进行赋值(写)操作而已。而对其成员的读写仍然是不受限制的。 但是,如果上例中的MyClass不是一个class而是一个struct,那么后面的两个语句就都会出错。
Const 和 static readonly的区别: 1 using System; 2 class P 3 { 4 static readonly int A=B*10; 5 static readonly int B=10; 6 public static void Main(string[] args) 7 { 8 Console.WriteLine("A is {0},B is {1} ",A,B); 9 } 10 } 对于上述代码,输出结果是多少?很多人会认为是A is 100,B is 10吧!其实,正确的输出结果是A is 0,B is 10。
好吧,如果改成下面的话:using System; 1 class P 2 { 3 const int A=B*10; 4 const int B=10; 5 public static void Main(string[] args) 6 { 7 Console.WriteLine("A is {0},B is {1} ",A,B); 8 } 9 10 } 对于上述代码,输出结果又是多少呢?难道是A is 0,B is 10?其实又错了,这次正确的输出结果是A is 100,B is |