《CLR via C#》读书笔记---07 常量和字段

核心归纳
这里写图片描述


常量:代码文件中的数据字段

① 常量是个占位符,不占用内存。
想象:有两段代码用同一个常量A(A=5)的情况
编辑:——-A——–A———(线假设为方法)
编译:——-5——–5———
编译和运行的时候,已经没有常量,没有A的概念,被常量的值所替代。那这样A的值就一直存在于代码文件中,存在于硬盘中。

② 因为一直存在,所以static的,又因为即使程序没有运行这个常量的值仍存在,这比static还static;但根据编译器的习惯,不能主动添加static修饰(接口中成员是public的,但不允许主动添加)


常量本质验证

因为是存在硬盘中,不需要动态分配内存,所以可以将纯常量的dll删除也不影响程序的正常
做下面一个实验:

这里写图片描述

删除程序集:No.7-ConstString.dll

这里写图片描述

删除程序集:No.7-NormalString.dll

这里写图片描述

字段

① volatile修饰符

编译器会优化内码,运行时会出现从缓存取数据的情况。在多线程的情况下,这样会造成取到的数据不是真实的,volatile修饰是禁止编译器优化这一点,从内存中取

② readonly修饰符

readonly是个伪君子。说只能在构造中赋值;但反射也可以赋值,如果有什么办法可以再次侵入构造,那也可以赋值了
readonly是个伪君子。说赋值后只能read,但是引用类型引用的对象无此限制

readonly也是C#翻译过来的关键字,个人感觉CLR中的InitOnly更贴切


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值