c#中的引用类型和值类型
一,c#中的值类型和引用类型 众所周知在c#中有两种基本类型,它们分别是值类型和引用类型;而每种类型都可以细分为如下类型: 什么是值类型和引用类型 什么是值类型: 进一步研究文档,你会发现所有的结构都是抽象类型System.ValueType的直接派生类,而System.ValueType本身又是直接从System.Object派生的。根据定义所知,所有的值类型都必须从System.ValueType派生,所有的枚举都从System.Enum抽象类派生,而后者又从System.ValueType派生。 所有的值类型都是隐式密封的(sealed),目的是防止其他任何类型从值类型进行派生。 什么是引用类型: 在c#中所有的类都是引用类型,包括接口。 区别和性能 区别: 值类型通常被人们称为轻量级的类型,因为在大多数情况下,值类型的的实例都分配在线程栈中,因此它不受垃圾回收的控制,缓解了托管堆中的压力,减少了应用程序的垃圾回收的次数,提高性能。 所有的引用类型的实例都分配在托管堆上,c#中new操作符会返回一个内存地址指向当前的对象。所以当你在创建个一个引用类型实例的时候,你必须要考虑以下问题: 内存是在托管堆上分配的 在分配每一个对象时都会包含一些额外的成员(类型对象指针,同步块索引),这些成员必须初始化 对象中的其他字节总是设为零 在分配对象时,可能会进行一次垃圾回收操作