CLR via C# 读书笔记 常量和字段

常量(constant)

  • 是一个特殊的符号,它有一个从不变化的值。
  • 定义常量符号时,它的值必须能在编译时确定。确定之后,编译器将常量的值保存在程序集的元数据中。
  • 常量的定义必须用基元类型,在c#中,Boolean 、Char、Byte、SByte、Int16、UInt16、Int32、UInt32、Int64、Single、Double、Decimal和String。C#也允许定义一个非基元类型的常量变量,前提是常量变量的值设定为null
  • 常量被看作是类型定义的一部分,可以看作是静态类型
  • 运行时不需要为常量分配内存,不能获取常量的地址,也不能以传引用的方式传递常量

字段(field)

字段是一种数据成员,其中容纳了一个值类型的实例或者对一个引用类型的引用


字段修饰符

CLR术语  C# 术语  说明
 Static  static   这种字段是类型状态的一部分,而不是对象状态的一部分 
 Instance    默认   这种字段与类型的一个实例关联,而不是与类型本身关联 
 InitOnly  readonly   这种字段只能由一个构造器方法中的代码写入 
 Volatile  volatile  

看到访问这种字段的代码,编译器、CLR或硬件就不会执行一些“线程不安全”

的优化措施。只有以下类型才能标记为volatile:所有的引用类型,Single、

Boolean、Byte、SByte、Int16、UInt16、Int32、UInt32、Char,以及

基础类型为Byte、SByte、Int16、UInt16、Int32或UInt32 的所有枚举类型

CLR支持类型(静态)字段和实例(非静态)字段。

  • 类型字段,用于容纳字段数据的动态内存是在类型对象中分配的。
  • 实例字段,用于容纳字段数据的动态内存是在构造类型的一个实例时分配的。

readonly字段

readonly 字段只能在一个构造器方法中写入。

原文地址:https://www.cnblogs.com/whx1973/p/2606921.html