C#實值型別與參考型別間轉換

來源:互聯網
上載者:User

實值型別與參考型別間轉換也稱為裝箱拆箱操作,


將基本類型或實值型別轉換成參考型別稱為裝箱,


將一個實值型別變成了參考型別。具體代碼的含義如下:

1)     int i=10:定義了一個整型變數i並賦初值。

2)     object obj=i:定義了一個參考型別obj,並將i的值賦值給obj,實現了裝箱操作。擴大轉換,可以隱式轉換。

3)     i=20:改變i的值,obj的值並不發生變化。

實現的實質是:參考型別obj被賦值時,是將整型變數i值10複製儲存到記憶體的一個地區(堆中),obj中存放此記憶體空間的指標(棧中)。所以i發生變化並不影響obj的值。


將參考型別轉換為基本類型或實值型別稱為拆箱。


將一個參考型別變成了實值型別。具體代碼的含義如下:

1)     object obj=10:為參考型別obj賦值。

2)     int i=(int)obj:將參考型別obj顯示轉換為整型,實現了拆箱操作。這裡是收縮轉換,必須採用顯式轉換。

3)     i=20:整型變數值發生了改變,不影響obj的值。

裝箱拆箱操作實質上是增加指標與去掉指標的操作,是一個挺浪費資源的過程,還可能引發錯誤。如果被拆箱的參考型別值為空白null,或與對應基本類型或實值型別衝突,就會引發拋出Sysytem.InvalidCastException異常。

拆箱異常。

object obj=10;

//float f=( float)obj;

說明:拆箱時類型指定與值不相符。因為obj值是個整型,要拆箱為浮點類型,就會發生異常。

實值型別與參考型別間之所以能相互轉換,是它們的根都是object類,都隱式繼承於object類。沒有這個前提,它們之間就無法實現相互轉換。

歸根結底,這些轉換還是繼承關係間對象的轉換,不存在繼承關係,轉換就不可能實現。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.