const readonly的区别

在C#中const 和 readonly都是常量的修饰符,那么两者有什么区别?


class Test{

const int num = 5;

readonly int num2=5;

}

上面这段代码我们并没有发现什么不同之处,现在我们先从初始化上面下下功夫.

class Test{

const int num;

readonly int num2=5;

}

而这段代码就会报错,因为这是常量是不能运行再次赋值的,如果没有初始化就会报错

class Test{

const int num=5;

readonly int num2;

}

这段代码却不会报错,明明都是常量为什么不赋值却不报错?这里就是const | readonly区别,const是静态常量,而readonly是动态常量,const的初始化是在编译时期就会被初始化,readonly是动态常量,是在运行时才赋值的,所以编译时期不会报错,因此readonly的初始化可以推迟到构造方法里执行。

class Test{

int a =5;

const int num= a+5;

readonly int num2;

}

这段代码是会报错的,前面我是说了const是静态常量是在编译时期就会存在的是数据,但是如果是变量就能不鞥呢确定数据的值所以会报错,如果是readonly就可以,因为是运行时所以没有问题,说了那么多来测试下。


class Test{

public void Show(){

 readonly int num = num2*5;

 readonly int num2 = 5;

Console.WriteLine("num:{0},num2{1}",num,num2);

}

}

如果你的答案是:25,5 那么说明你还是不懂,其实答案是:0,和5因为是执行时才初始化,一开始都是0,还没有执行到num2所以是0*5还是0,num2是5所以是这个答案,

如果想要25,5这样写

class Test{

public void Show(){

const int num = num2*5;

const int num2 = 5;

Console.WriteLine("num:{0},num2{1}",num,num2);

}

}

因为是编译时期就会被确定的值所以这里是num2是5,5*5就是25.\

总结:1.const、readonly定义的常量,指定初始值后(包括在构造函数内指定的初始值) 将不可更改,可读不可写;
        2.const定义时必须指定初始值,而readonly定义时可以不进行初始化同时也可以在构造函数内指定初始值。

        3.const和static readonly定义的常量是静态的,只能由类直接访问;而readonly定义的常量是非静态 的,只能由实例对象访问;  
        4.const是编译时常量,readonly是运行时常量;cosnt较高效,readonly较灵活。在应用上以readonly代替const,以平衡const在灵活性上的不足,
       同时克服编译器优化cosnt性能,所带来的程序集引用不一致问题;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值