C# 值类型与引用类型
值类型
值类型的变量直接存储数据。
值类型:byte,sbyte,short,ushort,int,long,float,double,decimal,char,bool,struct,enum
值类型变量声明后,不管是否已经赋值,编译器都会为其分配内存。
C#中的所有值类型均隐式派生自System.ValueType,而System.ValueType继承自System.Object
值类型是堆栈分配,或者分配结构中的内联。
每种值类型均有一个隐式的默认构造函数来初始化该类型的默认值。
所有值类型都是密封的,无法派生出新的值类型。
引用类型
引用类型的变量持有的是数据的引用,数据存储在数据堆中。
引用类型:string,class,object,interface,delegate,数组
一般引用类型直接继承于System.Object
当声明一个类时,只在栈中分配一小片内存用于容纳一个地址,而此时并没有为其分配堆上的内存空间。
当使用new创建一个类的实例时,分配堆上的空间,并把堆上空间的地址保存到栈上分配的小片空间中。
引用类型可以派生出新的类型;值类型不行呦。
引用类型可以包含null值;值类型不行(可空类型功能允许讲null赋值给值类型)。
引用类型变量的赋值只是复制对对象的引用,而不复制对象本身;而将一个值类型变量赋值给另一个值类型变量时,将复制包含的值。
注意:所有的数据类型都是对象。
网友评论