基元类型,引用类型,值类型

基元类型,引用类型,值类型

  • 一、基元类型
  • 二、引用类型和值类型
  • 三、值类型装箱拆箱

一、基元类型

编译器直接支持的数据类型就是基元类型

基元类型直接映射到Framework类库(FCL)中存在的类型。例如int直接映射到System.Int32,如下

//定义一个32位
System.Int32 a = new System.Int32()

//简化语法
int a = 0;

FCLl类型在C#都有对应的基元类型

基元类型,引用类型,值类型_第1张图片

二、引用类型和值类型

CLR支持两种类型:引用类型和值类型。虽然FCL的大多数类型都是引用类型,但程序员用得最多的还是值类型。引用类型总是从托管堆分配,C#的new操作符返回对象内存地址——即指向对象数据的内存地址。使用引用类型必须留意性能问题。首先要认清楚以下四个事实。

  1. 内存必须从托管堆分配。
  2. 堆上分配的每个对象都有一些额外成员,这些成员必须初始化。
  3. 对象中的其他字节(为字段而设)总是设为零。
  4. 从托管堆分配对象时,可能强制执行一次垃圾回收。

两者的区别:
基元类型,引用类型,值类型_第2张图片

基元类型,引用类型,值类型_第3张图片

三、值类型装箱拆箱

将值类型转换成引用类型要使用装箱机制。下面总结了对值类型的实例进行装箱时所发生的事情。

  1. 在托管堆中分配内存。分配的内存量是值类型各字段所需的内存量,还要加上托管堆
    所有对象都有的两个额外成员(类型对象指针和同步块索引)所需的内存量。
  2. 值类型的字段复制到新分配的堆内存。
  3. 返回对象地址。现在该地址是对象引用;值类型成了引用类型。

你可能感兴趣的:(c#)