C#数据类型

一、C#的数据类型:

C#数据类型_第1张图片


二、值类型与引用类型的区别:

 

值类型

引用类型

变量存放的内容

    实际值

   引用

默认值

   0

   空

内存分配

  分配在栈中

  分配在堆中

内存回收

  作用域结束时,所占空间自行释放

  使用完后不立即回收,而是交给GC处理回收

效率

  值类型效率高,不需要地址转换

  引用类型效率较低,需要进行地址转换

赋值操作

  创建一个新对象

  创建一个引用

类型扩展

  不易扩展,所有值类型都是密封(seal)的,所以无法派生出新的值类型

  具有多态的特性,方便扩展



三、装箱与拆箱:

 

装箱

拆箱

概念

  值类型→引用类型

 

  装箱是值类型到 object 类型或到此值类型所实现的任何接口类型的隐式转换。

  引用类型→值类型

 

  拆箱从 object 类型到值类型或从接口类型到实现该接口的值类型的显式转换。

举例

//装箱,将值类型转换为引用类型。

 

  int val= 100;

  object obj= val;     //隐式转换

  Console.WriteLine (“对象的值= {0}", obj);

//拆箱,将值类型转换为引用类型,再由引用类型转换为值类型的过程。

  int val= 100;

  object obj= val;

  int num= (int) obj;   //显式转换

  Console.WriteLine ("num: {0}", num);

内部操作

1)首先从托管堆中为新生成的引用对象分配内存。

2)然后将值类型的数据拷贝到刚刚分配的内存中。

3)返回托管堆中新分配对象的地址。

1)首先获取托管堆中属于值类型那部分字段的地址,这一步是严格意义上的拆箱。

2)将引用对象中的值拷贝到位于线程堆栈上的值类型实例中。

注:被装过箱的对象才能被拆箱



你可能感兴趣的:(C#数据类型)