值類型與引用類型的區(qū)別

1.值類型(ValueType)

值類型包括:數(shù)值類型,結構體,bool型,用戶定義的結構體,枚舉,可空類型。

值類型的變量直接存儲數(shù)據(jù),分配在托管棧中。變量會在創(chuàng)建它們的方法返回時自動釋放,例如在一個方法中聲明Char型的變量name=’C’,當實例化它的方法結束時,name變量在棧上占用的內存就會自動釋放

C#的所有值類型均隱式派生自System.ValueType。

結構體:struct(直接派生于System.ValueType)。

數(shù)值類型:整型,sbyte(System.SByte的別 名),short(System.Int16),int(System.Int32),long(System.Int64),byte(System.Byte),ushort(System.UInt16),uint(System.UInt32),ulong(System.UInt64),char(System.Char)。

浮點型:float(System.Single),double(System.Double)。

財務計算的高精度decimal型:decimal(System.Decimal)。

bool型:bool(System.Boolean的別名)。

用戶定義的結構體(派生于System.ValueType)。

枚舉:enum(派生于System.Enum)。

可空類型(派生于System.Nullable<T>泛型結構體,T?實際上是System.Nullable<T>的別名


2.引用類型(ReferenceType)

引用類型包括:數(shù)組,用戶定義的類、接口、委托,object,字符串,null類型,類。

引用類型的變量持有的是數(shù)據(jù)的引用,數(shù)據(jù)存儲在數(shù)據(jù)堆,分配在托管堆中,變量并不會在創(chuàng)建它們的方法結束時釋放內存,它們所占用的內存會被CLR中的垃圾回收機制釋放。

數(shù)組(派生于System.Array)

用戶需定義以下類型:

類:class(派生于System.Object);

接口:interface(接口不是一個“東西”,所以不存在派生于何處的問題。接口只是表示一種contract約定[contract])。

委托:delegate(派生于System.Delegate)。

object(System.Object的別名);

字符串:string(System.String的別名)。



圖片發(fā)自簡書App

圖片發(fā)自簡書App

圖片發(fā)自簡書App

圖片發(fā)自簡書App
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容