const 和readonly

原文:http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html

关于 const和readonly修饰符之间的区别,要牵涉到C#中两种不同的常量类型:

静态常量(compile-time constants) 和动态常量(runtime constants)

静态常量是指编译器在编译时候会对常量进行解析,并将常量的值替换成初始化的那个值

动态常量则是在运行的那一刻才获得值,编译器在编译期间将它标示为只读常量,而不用常量的值代替,这样动态常量不必在声明的时候就初始化,而可以延迟到构造函数中初始化.

1.const修饰的常量在声明的时候必须初始化;readonly修饰的常量则可以延迟到构造函数初始化

2.const修饰的常量在编译期间就被解析,即常量值被替换成初始化的值;readonly修饰的常量则延迟到运行的时候

此外const常量既可以声明在类中 也可以在函数体内,但是 static readonly常量只能声明在类中

public class Test
{
    static readonly int A=B*10;
    static readonly int B=10;
    
    public static void Main()
    {
          Console.WriteLine("A is {0}, B is {1}",A,B);
     }     
}   

上述 输出的 结果是 A is 0 ,B is 10   为啥A不是100? 因为在运行A=B*10 时 B 还是0

public class Test
{
    const int A=B*10;
    const int B=10;
    
    public static void Main()
    {
          Console.WriteLine("A is {0}, B is {1}",A,B);
     }     
}   

上述输出的结果是 A is 100 , B is 10 ,因为 A 和 B 在编译的时候 已经对值进行了解析

  

 

posted @ 2016-01-11 22:15  野生中的码农  阅读(190)  评论(0编辑  收藏  举报