c#語法復習總結(2)-數據類型


 C#數據類型可以分值類型和引用類型。值類型,先說說一個概念 c#棧和堆.

一,棧和堆.

堆:在c里面叫堆,在c#里面其實叫托管堆。為什么叫托管堆,我們往下看。

棧:就是堆棧,因為和堆一起叫着別扭,就簡稱棧了。后進先出

托管堆不同於堆,它是由CLR(公共語言運行庫(Common Language Runtime))管理,當堆中滿了之后,會自動清理堆中的垃圾。所以,做為.net開發,我們不需要關心內存釋放的問題。

數據結構堆棧:是一種后進先出的數據結構,它是一個概念,棧是一種后進先出的數據結構。而堆是一塊內存區域,與棧不同,堆里的內存能夠以任意順序存入和移除

內存堆棧:存在內存中的兩個存儲區(堆區,棧區)。

      棧區:存放函數的參數、局部變量、返回數據等值,由編譯器自動釋放

      堆區:存放着引用類型的對象,由CLR釋放

      棧空間比較小,但是讀取速度快

      堆空間比較大,但是讀取速度慢

二,值類型和引用類型 

  值類型。 
   值類型是在棧中分配內存,在聲明時初始化才能使用,不能為null。 
   值類型超出作用范圍系統自動釋放內存。 
   主要由兩類組成:結構,枚舉(enum),結構分為以下幾類: 
    1、整型(Sbyte、Byte、Char、Short、Ushort、Int、Uint、Long、Ulong) 
    2、浮點型(Float、Double) 
    3、decimal 
    4、bool 
    5、用戶定義的結構(struct) 
 引用類型。 
   引用類型在堆中分配內存,初始化時默認為null。 
   引用類型是通過垃圾回收機制進行回收。 
   包括類、接口、委托、數組以及內置引用類型object與string。 

      

注意: 但我們使用引用類型賦值時,其實是賦值的引用類型的引用,如果數組是一個值類型的數組,那么數組中直接存儲值,如果是一個引用類型的數組(數組中存儲的是引用類型),那么數組中存儲的是引用(內存地址)

三 裝箱 拆箱

  由於C#中所有的數據類型都是由基類System.Object繼承而來的,所以值類型和引用類型的值可以通過顯式(或隱式)操作相互轉換,而這轉換過程也就是裝箱(boxing)和拆箱(unboxing)過程。

 裝箱   是值類型到 object 類型或到此值類型所實現的任何接口類型的隱式轉換。對值類型裝箱會在堆中分配一個對象實例,並將該值復制到新的對象中。

拆箱   是從 object 類型到值類型或從接口類型到實現該接口的值類型的顯式轉換。

        

 


免責聲明!

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



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