基础类型相关
.NET中所有内建类型都继承自System.Object,若同时继承自System.ValueType类则为值类型,否则为引用类型。值类型和引用类型的区别如下:
- 赋值时,值类型变量会直接获得真实数据的一个副本,而引用类型只会将对象的引用赋值给变量,会造成多个对象指向同一个内存区块(对象实例)的情况。
- 内存分配时,引用类型对象会在堆上分配内存,而值类型变量会在堆栈上分配内存,运行效率比堆高很多。
- 装箱拆箱的概念
装箱,指的是CLR需要做额外工作把堆栈上的值类型移动到堆上。
拆箱,指的是把堆中的对象复制到堆栈中,返回其值。
应该注意的是,装箱和拆箱行为,都对应了堆栈上的一系列操作,会造成较大的性能代价。因此减少程装箱拆箱操作,是程序性能优化的一个重点。
避免装箱拆箱操作的思路,在于从两方面避免发生装箱拆箱行为的场合:- 值类型的格式化输出。
- System.Object类型的容器。对于这种情况,可以使用泛型技术来避免使用System.Object类型的容器。