首页 > 学院 > 开发设计 > 正文

readonly与const

2019-11-14 13:32:45
字体:
来源:转载
供稿:网友

readonly与const

在C#中,readonly 与 const 都是定义常量,但不同之处在于:readonly 是运行时常量,而 const 是编译时常量。

public const int intValue = 100;public void Test(){    Console.WriteLine(intValue*100);}

在上面的代码中, intValue是一个int类型的常量并且用100来初始化它,即 intValue 就是100,编译器会在编译时用100来替换程序中的intValue。

class Test{    public readonly Object _readOnly;     public Test()    {        _readOnly=new Object();    //right    }    public void ChangeObject()    {        _readOnly=new Object();    //compliler error    }}

使用readonly将 _readOnly变量标记为只读(常量),这里表示的是这个变量是常量,而不是指它所指向的对象是常量(看下面的代码)。而且它不同于const在编译时就已经确定了绑定对象,他是在运行时根据需求动态实现的,就如上面的代码,_readOnly就是在构造函数内被初始化的,即可以通过构造函数来为_readOnly指定不同的初始值。而一旦这个值指定的了之后在运行过程中就不能再更改。

class Person{    public int Age{get;set;}}class Test{    PRivate readonly Person _readOnly;    private readonly int _intValue;    public Test()    {        _readOnly=new Person();        _intValue=100;    }    public Test(int age,int value)    {        _readOnly=new Person(){ Age=age;}        _intValue=value;    }    public void ChangeAge(int age)    {        _readOnly.Age=age;    }    public void ChangeValue(int value)    {        _intValue=value;    //comppiler error    }    public int GetAge()    {        return _readOnly.Age;    }    public int GetValue()    {        return _intValue;    }        public static void Main()    {        Test testOne=new Test();        Test testTwo=new Test(10,10);                  Console.WriteLine("testOne: "+testOne.GetAge()+" "+testOne.GetValue());        Console.WriteLine("testTwo: "+testTwo.GetAge()+" "+testTwo.GetValue());        testOne.ChangeAge(20);        testTwo.ChangeValue(20);        Console.WriteLine(testOne.GetAge());        Console.WriteLine(testTwo.GetValue());    }}

readonly 与 const 最大的区别在于readonly 是运行时绑定,而且可以定义对象常量,而 const 只能定义值类型(如int)的常量。


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表