程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#學習日記18----裝箱(boxing)轉換與拆箱(unboxing)轉換

C#學習日記18----裝箱(boxing)轉換與拆箱(unboxing)轉換

編輯:C#入門知識

C#學習日記18----裝箱(boxing)轉換與拆箱(unboxing)轉換


經過前面的學習,我們基本能夠實現值類型與值類型之間的轉換,引用類型與引用類型之間的轉換,但是值類型與引用類型(object)之間的轉換又該怎麼實現呢??

在C# 中,我們采用裝箱來實現將值類型轉換成引用類型,用拆箱實現將引用類型轉換成值類型;換句話說,它可以實現從任何值類型、引用類型到Object類型之間的轉換,有了裝箱與拆箱對任何類型來說我們都可以看作object 類型 (有關object 類型的內容可以點擊 引用類型----object類 進入)

裝箱轉換:

在這裡我要補充一下,在.NET中,數據類型劃分為值類型和引用(不等同於C++的指針)類型,與此對應,內存分配被分成了兩種方式,一為棧,二為堆,(是托管堆。)值類型只會在棧中分配。引用類型分配內存與托管堆。

寫個例子:

int i = 123;

object o = i; //實現裝箱操作,其實也是隱式轉換。

 

裝箱轉換的原理圖如下:

\

 

裝箱轉換實質上是一種復制類型轉換,也就是說當我們完成裝箱後,再改變 i 的值 o 的值不會改變

 

拆箱轉換:

和裝箱轉換正好相反,拆箱轉換是指將一個對象類型顯示的轉換為一個值類型,拆箱的過程分為兩步,首先,檢查這個對象實例,看他是否為給定的值類型的裝箱值,然後,把這個實例的值拷貝給值類型的變量;

寫個例子(基於上面的裝箱代碼):

int n_int = (int)o; //強制將object類型轉換為int 類型

 

\

可以看出正好是裝箱的逆過程,將對象強制轉換為原來的類型,必須要注意的是,拆箱的值必須和它要轉換的目標的變量有相同的類型。

 

 

在這裡我有必要強調的是裝箱和拆箱是 從值類型或引用類型到object類型的轉換,從object類型到值類型或引用類型的轉換.

 

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved