在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
运行时常量使用readonly关键字声明,编译时常量使用const关键字声明: 1 //编译时常量,可以声明在方法中 2 public const int Millennium = 2000; 3 //运行时常量,不能声明在方法中 4 public static readonly int ThisYear = 2012;
运行时常量(readonly)和编译时常量(const)的不同二者的不同之处在于对它们的访问方式不同。编译时常量的值是在在目标代码中进行替换的,以下两个构造生产的IL代码时一样的: if(myDateTime.Year == Millennium)
if(myDateTime.Year == 2000) 这也就导致了编译期常量仅能用于基本类型(内建的整数和浮点类型)、枚举或字符串。在编译后得到的IL代码中,只有这些常量可以直接被替换成为它们的字面值。 而运行时常量将在运行时求值,在构造函数执行后不能被再次修改。引用运行时常量生成的IL将引用到readonly的变量,而不是变量本身的值(灵活)。
我们可以做一个假设:在一个名为Customer的程序集中分别定义了一个const字段和readonly字段: 1 class Customer 2 { 3 public static readonly int StartValue = 5; 4 public const int EndValue = 10; 5 }
在另一个程序集中引用了这两个值,当我们过了一段时间需要更新Customer程序集的这两个字段将值更改: 1 class Customer 2 { 3 public static readonly int StartValue = 15; 4 public const int EndValue = 20; 5 }
随后,分发Customer程序集,而没有重新编译整个应用程序时,我们可以发现在并没有重写编译整个应用程序的情况下所以引用了readonly字段的值变成了我们更新的值,而其他引用了const字段的值却没有更新。 这是因为:
所以说若想修改所有使用readonly的客户代码的行为,只需要简单的更新一下这个声明了readonly字段的程序集就可以了。而想要更新所有使用const的客户代码的行为则需要重新编译整个应用程序。
小结:
|
请发表评论