编程那点事编程那点事

专注编程入门及提高
探究程序员职业规划之道!

什么是值类型和引用类型

CLR支持引用类型和值类型2种类型,他们在.Net类层次机构中的位置不同,其分配的内存方式也不同。

什么是值类型?

基元类型、枚举和结构为值类型,也就是继承自System.ValueType的类型被称为值类型,主要有以下几种:bool、byte、char、decimal、double、enum、float、int、long、sbyte、short、struct、uint、ulong、ushort。

什么是引用类型?

类、字符串、标准模块、接口、数组和委托为引用类型。他们继承自System.Object:class、interface、delegate、object、string。

特殊的System.Object

根类型System.Object很特殊,它既不是值类型也不是引用类型,并且不能实例化。所以值类型和引用类型可以隐式或显式的转换,也就是装箱和拆箱。

值类型和引用类型的区别

  值类型 引用类型
内存分配地点 分配在栈中 分配在堆中
效率 效率高,不需要地址转换 效率低,需要进行地址转换
内存回收 使用完后,立即回收 使用完后,不立即回收,等待GC回收
赋值操作 进行复制,创建一个同值新对象 只是对原有对象引用
函数参数与返回值 是对象的复制 是原有对象的引用,并不产生新的对象
类型扩展 不宜扩展 容易扩展,方便与类型扩展

未经允许不得转载: 技术文章 » .NET编程 » 什么是值类型和引用类型