7常量

c#中,const是默认具有static属性的,【这与c++语言有些不同】。因此不允许在const前有static修饰。

说到const,就很难不提到另外一个东西 readonly,readonly只读量。从语义上来说,就是是只读的。c#中可以进行内联赋值或者在构造器中进行赋值,而不允许其他方法对只读量进行改写【可以通过反射进行修改】

那么,const和readonly区别在哪里:
const是常量。readonly是只读量。
const的”常“体现在它是编译时的量,也就是对于const修饰的变量的赋值,必须能够在编译时期获得。
而readonly这种只读量是在运行时获得值。

c#中,const只能用来修饰基元类型【byte,sbyte,int16,int32,bool。。。】,其实也可以修饰引用变量,前提是将其赋值为null.

举个例子说说const和readonly的一个”有趣“的地方:

class ConstV{
    public const int age = 15;
}

将其编译为一个dll文件。
然后在新项目中引用上面的dll:

class Demo{
    public static void Main(String[] args){
        System.Console.WriteLine(ConstV.age);
    }
}

编译运行后,将dll文件删除掉,发现依然是可以的,此时,将dll文件中age从15改为1000,运行Demo程序集,结果仍然是15。查看IL代码会发现,age这个值15是直接嵌入到了exe中,除非修改了dll后,再重新编译demo程序集。

而将ConstV中的const改为 static readonly,会发现,demo程序集的运行离不开dll了,当在dll中作出修改,并编译重新生成dll后,不用对demo程序进行重新编译,运行,值依然会发生改变【和dll中一致】。

从这个小例子中应该能够体会出const和readony的一点用途吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值