当前位置:编程学习 > C#> 正文

C#中的readonly和const关键字

时间:2013-8-14类别:编程学习

C#中的readonly和const关键字

C#中的readonly和const关键字
  • 一、Const关键字
  •  
  • 1、必须在定义时就进行赋值,并且赋值为常量,不能赋值为变量。
  • 2、const常量隐含是static的,所以只能用类名来进行方法.
  • 3、常量的类型可以为简单类型,枚举类型,各种引用类型(包括string)。这里引用类型的常量,如果不是string类型,则只允许赋以null。常量的类型不能为普通的struct类型。如果要实现struct类型的保持不变的量,可以用readonly。
  • 4、const可以修饰方法内的局部变量。
  •  
  •  
  •  
  • 二、ReadOnly关键字
  •  
  • 1、readonly域可以是各种类型。
  • 2、readonly域可以用变量或表达式进行赋值。
  • 3、readonly不能修饰局部变量。
  • 4、readonly域并不隐含static性质。
  • 5、readonly域要求定义时初始化。如果没有初始化,自动取默认值(0,false,null等)。如果要赋值,可以定义时初始化,也可以在构造方法中赋值,包括使用out及ref参数进行处理。但它最多只能被赋值一次。赋值以后,其值不能被修改。
  •  
  •  
  •  
  • 三、Const和Readonly的两个实例
  •  
  •  
  •  
  • C# 代码   复制
  •     
        public class MathUtitlity
        {
            public const double PI = 3.14;
            public readonly double E = 2.782;
    
        }
    
        class Program
    
        {
            static void Main(string[] args)
    
            {
                MathUtitlity math = new MathUtitlity();
                math.E = 2.5;//编译错误,不能改变已经初始化的readonly字段
                MathUtitlity.PI = 3.1456;//编译错误,不能改变已经初始化的const 字段
            }
        } 	
    			
  •  
  •  
  • C# 代码   复制
  •     
        //定义Person,有一个属性:name。
        public class ConstReadonly
        {
            public const string _const="_const";
            public readonly Person _readonly;
            public ConstReadonly()
            {
                _readonly = new Person();
            }
        }
        public class Person
        {
            public string name;
            public Person()
            {
                this.name = "Untitled";
            }
            public Person(string name)
            {
                this.name = name;
            }
        }
    
        class Program
        {
            static void Main(string[] args)
            {
                ConstReadonly cr = new ConstReadonly();
                Console.WriteLine(cr._readonly.name);
                cr._readonly.name = "Changed";
                Console.WriteLine(cr._readonly.name);
            }
        }
    
        //输出结果为:
        //Untitled
       //Changed
    
    			
  •  
  •  
  •  
  • 四、Const与Readonly区别

  • 1. const 字段只能在该字段的声明中初始化。 readonly 字段可以在声明或构造函数中初始化。因此,根据所使用的构造函数,readonly 字段可能具有不同的值。
    2. const 字段是编译时常数,而 readonly 字段可用于运行时常数。
    3. const 默认就是静态的,而 readonly 如果设置成静态的就必须显示声明。
    4.const 对于引用类型的常数,可能的值只能是 string 和 null。readonly可以是任何类型     
  •                
  • 标签:
    上一篇下一篇

    猜您喜欢

    热门推荐