《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变量进行类型检查,它将变量与它相关的操作信息打包。在运行时,对这些信息进行检查,以确保操作与变量的实际类型一致。否则,将在运行时抛出异常。