基元类型,引用类型,值类型
- 一、基元类型
- 二、引用类型和值类型
- 三、值类型装箱拆箱
一、基元类型
编译器直接支持的数据类型就是基元类型
基元类型直接映射到Framework类库(FCL)中存在的类型。例如int直接映射到System.Int32,如下
//定义一个32位
System.Int32 a = new System.Int32()//简化语法
int a = 0;
FCLl类型在C#都有对应的基元类型
二、引用类型和值类型
CLR支持两种类型:引用类型和值类型。虽然FCL的大多数类型都是引用类型,但程序员用得最多的还是值类型。引用类型总是从托管堆分配,C#的new操作符返回对象内存地址——即指向对象数据的内存地址。使用引用类型必须留意性能问题。首先要认清楚以下四个事实。
- 内存必须从托管堆分配。
- 堆上分配的每个对象都有一些额外成员,这些成员必须初始化。
- 对象中的其他字节(为字段而设)总是设为零。
- 从托管堆分配对象时,可能强制执行一次垃圾回收。
两者的区别:
三、值类型装箱拆箱
将值类型转换成引用类型要使用装箱机制。下面总结了对值类型的实例进行装箱时所发生的事情。
- 在托管堆中分配内存。分配的内存量是值类型各字段所需的内存量,还要加上托管堆
所有对象都有的两个额外成员(类型对象指针和同步块索引)所需的内存量。- 值类型的字段复制到新分配的堆内存。
- 返回对象地址。现在该地址是对象引用;值类型成了引用类型。