C#隱式轉換與顯示轉換


System.Objec時C#中所有類型的基類,也就是萬類之源。

一、值類型

  值類型都繼承自System.ValueType(派生自System.Objec),繼承自System.ValueType的類型在CLR中具有特殊的行為,值類型變量直接包含它們的值。對於值類型變量,沒有單獨的堆分配或垃圾回收開銷。

  值類型分為兩類:結構和枚舉

  1.結構

  值類型為“密封”,也就是結構類型不能派生類型,並且不能把結構類型定義為從任何用戶定義的類或結構繼承,因為結構只能繼承自System.ValueType。但是一個結構可以繼承一個或多個接口。可將結構類型強制轉化為Object類型或任何它所繼承的接口類型,但這會發生裝箱操作。

  2.枚舉

  枚舉定義的一組已命名的整型變量。所有的枚舉都繼承自System.Enum(繼承自System.ValueType)。適用於結構的規則也適用於枚舉。

 二、引用類型

   定義為類、接口、委托或數組的類型都是引用類型。在運行時,當聲明引用類型的變量時,該變量為一直包含值null,直至使用new運算符顯示創建對象,或為該變量分配已在其他位置使用new創建的對象。

三、裝箱與拆箱

  裝箱:將值類型轉化為Object類型或由此之類型實現的任何接口類型的過程。CLR對值類型進行裝箱操作時,會將值包裝到System.Object內部,再將后者存儲托管堆中。

  拆箱:拆箱就是從對象中取出值類型。

  裝箱是隱式的,拆箱是顯式的。性能上,裝箱和拆箱會造成一定的性能損失。對值類型進行裝箱時必須分配並創建對象,拆箱時的強制轉換也需要進行大量的計算。值得注意的是拆箱強轉的值類型應與裝箱時的值類型一致

 

 

 C#類型

C#知識回顧-裝箱與拆箱


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM