黑马程序员 改善C#编程的50个建议——偏爱readonly而不是const

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

偏爱readonly而不是const

C#有两种常量类型:编译时常量(用const声明)与运行时常量(用readonly声明)。
编译时常量可以在方法内声明,而运行时常量不可以。
编译时常量只能是原子类型(内置整型、浮点型、枚举、string等),而运行时常量可以是任何类型。
最重要的是Readonly类型变量在运行时被解释,IL会生成对应对象的常引用,而const变量会被IL生成对应的值,而这样会对后期的维护造成不便。如下代码:
public class UsefulValues
{
public static readonly int StartValue = 5;
public const int EndValue = 10;
}
而在另一程序集,你引用了这些值:
for(int i = UsefulValues.StartValue;i<usefulvalues.endvalue; i++)
 Console.WriteLine("value is {0}", i);
然后经过一段事件你对原程序集进行了修改,修改后:
public class UsefulValues
{
public static readonly int StartValue = 105;
public const int EndValue = 120;
}
此时你希望输出是
value is 105
value is 106
...
value is 119
而实际将什么都不输出,因为此时的for循环已经是如下代码:
for(int i = UsefulValues.StartValue;i<10; i++)
Console.WriteLine("value is {0}", i);

const变量会比readonly变量要稍微快一点,因为IL是直接为其生成常量字符串或数字,而readonly的灵活性要更好,因此我们应当偏爱readonly.


---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值