值類型
值類型的變量直接存儲數據。
值類型: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賦值給值類型)。
引用類型變量的賦值只是復制對對象的引用,而不復制對象本身;而將一個值類型變量賦值給另一個值類型變量時,將復制包含的值。
注意:所有的數據類型都是對象。