本章内容
C#程序是一组类型声明
类型是一种模板
实例化类型
数据成员和函数成员
预定义类型
用户定义类型
栈和堆
值类型和引用类型
变量
静态类型和dynamic关键字
可空类型
静态类型和dynamic关键字
你可能巳经注意到了,每一个变量都包括变量类型。这样编译器就可以确定运行时需要的内
存总量以及哪些部分应该存在栈上,哪些部分应该存在堆上。变量的类型在编译的时候确定并且
不能在运行时修改。这叫作静态类型。
但是不是所有的语言都是静态类型的,诸如IronPython和IronRuby之类的脚本语言是动态
类型的。也就是说,变量的类型直到运行时才会被解析。由于它们是·NET语言,所以C#程序需
要能够使用这些语言编写的程序集。问题是,程序集中的类型到运行时才会被解析,而C#又要
引用这样的类型并且需要在编译的时候解析类型。
针对这个问题,C#语言的设计者增加了dynamic关键字,代表一个特定的C#类型,它知道
如何在运行时解析自身。
在编译时,编译器不会对dynamic类型的变量做类型检查。相反,它将与该变量及该变量的
操作有关的所有信息打包。在运行时,会对这些信息进行检查,以确保它与变量所代表的实际类
型一致。否则,将在运行时抛出异常。
可空类型
在某些情况下,特别是使用数据库的时候,你希望表示变量目前未保存有效的值对于引用
类型,这很简单,可以把变量设置为null。但定义值类型的变量时,不管它的内容是否有有效的
意义,其内存都会进行分配。
对于这种情况,你可能会使用一个布尔指示器来和变量关联,如果值有效,则设置为true,
否则就设置为false。
可空类型允许创建可以标记为有效或无效的值类型变量,这样就可以在使用它之前确定值的
有效性。普通的值类型称作非可空类型。第27章将详细介绍可空类型,那时你己经对C#有了更
深人的理解。