首頁 後端開發 C#.Net教程 比較C#中值類型和參考類型的區別

比較C#中值類型和參考類型的區別

Sep 06, 2017 am 11:13 AM
.net 差別

CLR支援兩種類型:值類型和引用類型,看起來FCL的大多數類型是引用類型,但用的最多的還是值類型。參考類型總是從託管堆中分配,在用new運算元實例一個對象,返回對象記憶體地址存放在一個變數中。在使用引用類型時要了解其四個心理因素:

       1.內存必須從託管堆中分配

       2.堆上分配的每個對像都有一些額外成員,這些成員在使用前必須初始化。

       3.物件中的其他位元組總是設為零。

       4.從託管堆分配物件時,可能強制執行一次垃圾回收。

由此可見,引用型態若是濫用勢必造成過載。再看值類型,其是輕量級類型,一般分配在線程棧上也可嵌入到引用類型對像中,承載它的變量不包含指向實例的指針,當然也不受垃圾回收器的控制,因此值類型的使用緩解了託管堆的壓力,減少了應用程式生存期內的垃圾回收的次數。

     C#中稱為‘類別’的都是引用型,而值型別都變成結構或枚舉。所有結構都是由抽象型別System.ValueType直接派生。而其本身有直接從Object派生,所有枚舉從System.Enum抽象型別派生,Enum又從ValueType派生,環環相扣啊。

在設計自己的型別時,什麼時候將定義成值型別呢?

      1.類型具有基元類型的行為(編譯器直接支援的資料類型(像Int32,Int64等))

#      2。類型不需要從其他類型繼承。

      3.型別也不會衍生出其他任何型別。

      4.由於值類型在作為實參或是返回值的時候,需要進行相應字段的複製,如若實例過大,會造成一定的性能損失。

      所以要求類型實例較小(16位元組以內),實例較大,但不作為方法實參傳遞和從方法返回也可。

關於值型別和參考型別的差別,大致列了一下幾點:

     1.引用型別處於已裝箱形式,值型別處於未裝箱形式,兩者也可透過一定方式互相轉換(具體說明會在下一篇部落格中詳談)

     2.值型別不應引入任何新的虛方法,所有方法都不能是抽象的,且都是隱式密封防止重寫。

     3.將值類型變數賦給另一個值類型變量,會執行逐字段複製。將引用類型的變數付給另一個引用類型,只複製記憶體位址。兩個或多個引用類型變數能引用堆上的同一個對象,對一個變數執行的操作可能會影響另一個變數所引用的對象。相反,值類型變數獨立,不互相影響。

     4.未裝箱的值類型不在堆上分配,所以該類型的一個實例一旦不在活動,為他們分配的存儲就會釋放,不會等待垃圾回收

以上是比較C#中值類型和參考類型的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

比特幣有沒有股票?比特幣有股權嗎? 比特幣有沒有股票?比特幣有股權嗎? Mar 03, 2025 pm 06:42 PM

比特幣有沒有股票?比特幣有股權嗎?

deepseek r1版本和v3版本有什麼區別 deepseek r1版本和v3版本有什麼區別 Feb 19, 2025 pm 03:24 PM

deepseek r1版本和v3版本有什麼區別

DeepSeek使用常見問題匯總 DeepSeek使用常見問題匯總 Feb 19, 2025 pm 03:45 PM

DeepSeek使用常見問題匯總

盤前盤後交易有什麼區別?盤前盤後交易區別詳解 盤前盤後交易有什麼區別?盤前盤後交易區別詳解 Mar 03, 2025 pm 11:54 PM

盤前盤後交易有什麼區別?盤前盤後交易區別詳解

為什麼說Bittensor是AI賽道的'比特幣”? 為什麼說Bittensor是AI賽道的'比特幣”? Mar 04, 2025 pm 04:06 PM

為什麼說Bittensor是AI賽道的'比特幣”?

韓國比特幣和國內比特幣有什麼不同嗎? 韓國比特幣和國內比特幣有什麼不同嗎? Mar 05, 2025 pm 06:51 PM

韓國比特幣和國內比特幣有什麼不同嗎?

佩佩大舉買入並拋售,MUTM 是 2025 年更明智的投資嗎? 佩佩大舉買入並拋售,MUTM 是 2025 年更明智的投資嗎? Mar 03, 2025 pm 07:09 PM

佩佩大舉買入並拋售,MUTM 是 2025 年更明智的投資嗎?

一文了解USDC、USDT、USD三者究竟有什麼差別 一文了解USDC、USDT、USD三者究竟有什麼差別 Jan 09, 2025 pm 02:47 PM

一文了解USDC、USDT、USD三者究竟有什麼差別

See all articles