C#引用類型和值類型的適用場(chǎng)合和區(qū)別
1.值類型
值類型包括:數(shù)值類型,結(jié)構(gòu)體,bool型,用戶定義的結(jié)構(gòu)體,枚舉,可空類型。
值類型的變量直接存儲(chǔ)數(shù)據(jù),分配在托管棧中。變量會(huì)在創(chuàng)建它們的方法返回時(shí)自動(dòng)釋放。
所有的值類型都是密封(seal)的,所以無(wú)法派生出新的值類型。
2.引用類型
引用類型包括:數(shù)組,用戶定義的類、接口、委托,object,字符串,null類型,類。
引用類型的變量持有的是數(shù)據(jù)的引用,數(shù)據(jù)存儲(chǔ)在數(shù)據(jù)堆,分配在托管堆中,變量并不會(huì)在創(chuàng)建它們的方法結(jié)束時(shí)釋放內(nèi)存,它們所占用的內(nèi)存會(huì)被CLR中的垃圾回收機(jī)制釋放。
CLR常用簡(jiǎn)寫(xiě)詞語(yǔ),CLR是公共語(yǔ)言運(yùn)行庫(kù)(Common Language Runtime)和Java虛擬機(jī)一樣也是一個(gè)運(yùn)行時(shí)環(huán)境,它負(fù)責(zé)資源管理(內(nèi)存分配和垃圾收集等),并保證應(yīng)用和底層操作系統(tǒng)之間必要的分離。
3.值類型與引用類型區(qū)別:
4.適用場(chǎng)合:
值類型在內(nèi)存管理方面具有更好的效率,并且不支持多態(tài),適合用做存儲(chǔ)數(shù)據(jù)的載體;引用類型支持多態(tài),適合用于定義應(yīng)用程序的行為。
引用類型可以派生出新的類型,而值類型不能,因?yàn)樗械闹殿愋投际敲芊獾摹?/p>
引用類型可包含null值,值類型不能(可空類型功能允許將null賦給值類型,如int a=null);
引用類型變量的賦值只復(fù)制對(duì)對(duì)象的引用,而不復(fù)制對(duì)象本身。而將一個(gè)值類型變量賦給另一個(gè)值類型變量時(shí),將復(fù)制包含的值
5.裝箱和拆箱
1)裝箱就是將一個(gè)值類型轉(zhuǎn)換成等值的引用類型
在堆上為新生成的對(duì)象(該對(duì)象包含數(shù)據(jù),對(duì)象本身沒(méi)有名稱)分配內(nèi)存。
將堆棧上值類型變量的值拷貝到堆上的對(duì)象中。
將堆上創(chuàng)建的對(duì)象的地址返回給引用類型變量(從程序員角度看,這個(gè)變量的名稱就好像堆上對(duì)象的名稱一樣)。
2)拆箱就是將一個(gè)引用類型轉(zhuǎn)換成等值的值類型
將引用類型變量堆上的值拷貝到棧上面。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請(qǐng)查看下面相關(guān)鏈接
相關(guān)文章
C#中C/S端實(shí)現(xiàn)WebService服務(wù)
本文主要介紹了C#中C/S端實(shí)現(xiàn)WebService服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07C#使用kernel32.dll讀寫(xiě)INI文件的案例詳解
INI就是擴(kuò)展名為"INI"的文件,其實(shí)他本身是個(gè)文本文件,可以用記事本打開(kāi),主要存放的是用戶所做的選擇或系統(tǒng)的各種參數(shù),這篇文章主要介紹了C#使用kernel32.dll讀寫(xiě)INI文件的方法,需要的朋友可以參考下2023-05-05C#通過(guò)GET/POST方式發(fā)送Http請(qǐng)求
本文主要介紹了C#實(shí)現(xiàn)http請(qǐng)求的兩種方式,get和post方式。文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09C#獲取某路徑文件夾中全部圖片或其它指定格式的文件名的實(shí)例方法
在本篇文章里小編給大家整理的是關(guān)于C#獲取某路徑文件夾中全部圖片或其它指定格式的文件名的實(shí)例方法,需要的朋友們參考下。2019-10-10