《Illustrated C# 2012, 4th Edition》Daniel M. Solis 第3章 类型、存储和变量 笔记

数据类型

C程序是一组函数和数据类型,C++程序是一组函数和类,C#程序是一组类型声明。
可执行的C#程序的类型声明中必须包含一个存在Main方法的类。命名空间是将类型声明分组的方法。

C#提供16种预定义类型:

  • 与C/C++不同,C#中数值类型不具有布尔意义。
  • char为2 byte,容纳一个UCS-2字符。
  • decimal是高精度小数类型,可以准确表示分数,常用于货币计算。

C#中预定义类型是底层.NET类型的别名:

C#提供6种自定义类型:class、struct、array、enum、delegate、interface。

栈和堆,值类型和引用类型

CLR的GC(Garbage Collector,垃圾收集器)会自动清除堆中无主的对象。

引用类型需要存储两部分内存:引用部分和数据部分。其中数据部分总位于堆中。

C#的值类型与引用类型:

变量

C#提供4种变量:

变量的存储位置,声明时没有initializer是否自动初始化,如图:

dynamic

.NET语言中,IronPython、IronRuby等使用动态类型(运行时才被解释)。C#程序要访问这些语言编写的程序集中的变量,只能使用dynamic类型。

C#编译器不对dynamic变量进行类型检查,它将变量与它相关的操作信息打包。在运行时,对这些信息进行检查,以确保操作与变量的实际类型一致。否则,将在运行时抛出异常。