c# 高级编程 (第35页)

135 阅读2分钟

常量

  • 必须在声明时初始化。指定了值之后,就不能再改写了
  • 值必须能在编译时用于计算。因此不能用从变量中提取出来的值来初始化常量。如果非要这么做的话,应该使用只读字段
  • 常量是隐式静态的。不必(实际上,也不允许)在常量声明中加static修饰符

使用常量的好处

  • 代替较难读取的数字和字符串,使程序易读
  • 使程序易于修改
  • 对于不允许修改值的情况,如果在程序中的另一个地方将另一个值赋给它,可在编译时及时发现这个错误

值类型和引用类型

  • 值类型直接存储其值,引用类型存储对值的引用
  • 值类型存储在堆栈(stack)中,引用类型存储在托管堆(managed heap)上
  • 把基本类型规定为值类型,而把包含许多字段的较大类型规定为引用类型c#这么设计是为了得到最佳性能。如果要把自己的类型定义为值类型,可以声明为struct

null

  • 如果变量是一个引用,就可以把其值设为null, 表示它不引用任何对象
  • 如果将引用设为null, 那就不可能对它调用任何非静态的成员函数或字段,否则会在运行期间抛异常
  • c# 8计划支持不可空的引用类型,需要使用非空值进行初始化;而允许使用空值的引用类型,要求显式声明为可空的引用类型

引用类型

  • 其生存期可以跨多个函数调用,可以通过一个或几个别名来访问
  • CLR实现一种精细的算法,来跟踪哪些引用变量仍然是可以访问的,哪些已经不能访问了。CLR会定期删除不能访问的对象,把它们占用的内存返回给系统,这是通过垃圾回收器实现的