现在的位置: 首页 > 综合 > 正文

值类型 and 引用类型

2012年06月21日 ⁄ 综合 ⁄ 共 699字 ⁄ 字号 评论关闭

      CLR类型系统CTS(Common Type System)将类型分为两种:值类型与引用类型。对应简单值的类型称为值类型,对应传统“对象”的类型称为引用类型。

值类型直接包含数据,值类型的实例分配在堆栈或者内联结果上面,值类型的实例不需要进行垃圾回收。CLR针对C#语言内置了15种类型:object、string、char、bool、decimal、byte、sbyte、short、ushort、int、uint、long、ulong、float、double。

      引用类型包括自描述类型、指针类型以及接口类型。其中自描述类型又分为类类型和数组。而类类型又分为自定义类类型、装箱的值类型以及委托类型。

      除了枚举类型以外的值类型的直接基类型是System.ValueType,而枚举类型直接继承于System.Enum,System.Enum又继承于System.ValueType。除了接口外的数据类型均继承于System.Object。

      引用类型的实例是分配在托管堆上面,在对象不再被引用时,GC堆将会对其进行回收,但是对象的引用是分配在堆栈上面的。

下面主要说struct类型。

      struct是值类型,继承于System.ValueType。struct类型可以像class类型一样拥有自己的方法、字段,也可以实现接口,但不支持继承。但是不能给C#的struct指定显示的基类型,即隐含的基类型总是System.ValueType。不能将struct声明为abstract或者sealed,编译器将隐式地添加sealed修饰符。结构的值存在堆栈或者内联上。

 

抱歉!评论已关闭.