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

C# 裝箱和拆箱的知識回憶

編輯:C#入門知識

C# 裝箱和拆箱的知識回憶。本站提示廣大學習愛好者:(C# 裝箱和拆箱的知識回憶)文章只能為提供參考,不一定能成為您想要的結果。以下是C# 裝箱和拆箱的知識回憶正文


裝箱是將值類型轉換為 object 類型或由此值類型完成的任何接口類型的一個進程。 當 CLR 對值類型停止裝箱時,會將該值包裝到 System.Object 外部,再將後者存儲在托管堆上。 拆箱將從對象中提取值類型。 裝箱是隱式的;拆箱是顯式的。 裝箱和拆箱的概念是類型零碎 C# 一致視圖的根底,其中任一類型的值都被視為一個對象。

在上面的示例中,將整型變量 i 停止了裝箱並分配給對象 obj。

static void Main(string[] args)
  {
   var i = 123; //System.Int32
   //對 i 裝箱(隱式)
   object obj = i;
   Console.Read();
  }

然後,可以將對象 obj 拆箱並分配給整型變量 i。

static void Main(string[] args)
  {
   var i = 123; //System.Int32
   //對 i 裝箱(隱式)
   object obj = i;
   //對 obj 停止拆箱(顯式)
   i = (int)obj;
   Console.Read();
  }

這裡用代碼停止演示裝箱拆箱操作:

static void Main(string[] args)
  {
   //運用 string.Format 演示裝箱的運用,在這裡 24 會被停止裝箱操作
   var formatStr = string.Format("{0} {1}.", "I'm", 24);
   Console.WriteLine($"formatStr: {formatStr}");
   var objs = new List<object>();
   for (int i = 0; i < 5; i++)
   {
    //每一次 i 都會裝箱到 objs 中
    objs.Add(i);
   }
   Console.WriteLine("==========");
   foreach (var obj in objs)
   {
    //兩個 object 類型不能直接運用 * ,需求運用 int 停止顯式拆箱
    Console.WriteLine($"{obj} * {obj} = {(int)obj * (int)obj}");
   }
   Console.Read();
  }

功能

絕對於復雜的賦值而言,裝箱和取消裝箱進程需求停止少量的計算。對值類型停止裝箱時,必需分配並結構一個新對象。拆箱所需的強迫轉換也需求停止少量的計算,只是水平較輕。假如你的操作正處於循環的中心,你會很分明的覺得到功能問題。

裝箱 

裝箱用於在堆中存儲值類型。 裝箱是值類型到 object 類型或到此值類型所完成的任何接口類型的隱式轉換。對值類型裝箱會在堆中分配一個對象實例,並將該值復制到新的對象中。

請看以下值類型變量的聲明:

var i = 123;    //System.Int32

以下語句對變量 i 隱式使用了裝箱操作:

 //對 i 裝箱(隱式)進對象 obj
 object obj = i;

此語句的後果是在堆棧上創立對象援用 o,而在堆上則援用 int 類型的值。 該值是賦給變量 i 的值類型值的一個正本。 下圖闡明了兩個變量 i 和 o之間的差別。

當然,你也可以選擇執行顯式裝箱,但顯式裝箱歷來不是必需的。

拆箱

拆箱是從 object 類型到值類型或從接口類型到完成該接口的值類型的顯式轉換。 拆箱的操作包括:

反省對象實例,以確保它是給定值類型的裝箱值。

將該值從實例復制到值類型變量中。

   int i = 123;  // 值類型
   object o = i;  // 裝箱
   int j = (int)o; // 拆箱

要在運轉時成功拆箱值類型,被拆箱的項必需是對一個對象的援用,該對象是先前經過裝箱該值類型的實例創立的。 嘗試取消裝箱 null 會招致 NullReferenceException。 嘗試取消裝箱對不兼容值類型的援用會招致 InvalidCastException。

以上就是本文的全部內容,希望本文的內容對大家的學習或許任務能帶來一定的協助,同時也希望多多支持!

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