C#類型理解

來源:互聯網
上載者:User

  C#類型主要分為兩類:實值型別和參考型別。C#主要類型如下:

類別

描述

實值型別

簡單類型

有符號整形:sbyte,short,int,long

無符號整形:byte,ushort,uint,ulong

Unicode字元:char

IEEE浮點型:float,double

高精度小數:decimal

布爾型:bool

枚舉類型

使用者自訂類型:enum

結構類型

使用者自訂類型:struct

參考型別

類類型

所有其他類型基類:object

Unicode字串:string

使用者自訂類型:class

介面類型

使用者自訂類型:interface

數群組類型

單維多維陣列:int[],int[,]

委託類型

使用者自訂類型:delegate

  C#實值型別和參考型別的區別:

  1、定義:實值型別(Value Type)執行個體通常分配線上程的堆棧(stack)上,不包含任何指向執行個體資料的指標,變數本身就包含了執行個體資料。實值型別的執行個體要麼在堆棧上,要麼內聯在結構上。實值型別包括:簡單類型,結構體類型和枚舉類型。

  參考型別(Reference Type)執行個體分配在託管堆(managed heap)上,變數儲存了執行個體資料的記憶體引用。參考型別儲存對值的記憶體位址的引用,位於堆上。參考型別包括:類類型,數組,委託類型和介面類型。

  2、記憶體概況:實值型別分配在堆棧上,每執行個體一個實值型別則在堆棧上分配一個記憶體位址,不同的變數佔用了不同的堆棧地址,改變一個變數不會影響其他變數。

  參考型別在堆棧中只是儲存了其執行個體資料的引用地址,實際的資料儲存在託管堆中,所以可能不同的變數儲存了同一地址的資料引用,改變一個變數會影響另一個變數的值。

  3、嵌套結構:參考型別嵌套實值型別時,作為參考型別執行個體的一部分也會被分配到託管堆上。

  實值型別嵌套參考型別時,參考型別作為實值型別的成員變數,堆棧上儲存該成員的引用,而成員的實際資料還是儲存在託管堆上。即實值型別執行個體總是分配在它聲明的地方,聲明為局部變數時記憶體被分配在堆棧上,聲明為參考型別成員變數時記憶體被分配到託管堆上;參考型別總是分配在託管堆上。

  4、實值型別繼承自ValueType,參考型別繼承於object。

  5、實值型別的記憶體不由GC控制,範圍結束時,實值型別會自動釋放,減少託管堆的壓力,具有效能優勢。而參考型別的記憶體配置與回收都由GC來完成。

  6、實值型別時密封的,不能作為基類,但可以單繼承或者多繼承介面。參考型別一般可以繼承。

  7、實值型別不具有多態,參考型別具有多態。

  8、實值型別不能為null,會自動初始化為0;參考型別預設初始化為null,表示沒有指向任何託管堆的引用地址。

  9、實值型別由2種狀態:裝箱和未裝箱;參考型別只有一種形式:裝箱。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.