1. 程式人生 > >C#中的裝箱(boxing)拆箱(unboxing) (續)

C#中的裝箱(boxing)拆箱(unboxing) (續)

裝箱操作:

1.從託管堆中分配好記憶體。分配的記憶體是值型別的各個欄位所需要的記憶體量加上同步塊和方法表指標所需的記憶體量

2.值型別的欄位複製到新分配的堆記憶體中。

3.返回物件的地址,這個地址是是一個物件的引用,值型別是一個引用型別。

拆箱操作:

1.檢查裝箱引用,如果為Null,丟擲NullReferenceExxeption異常。

2. 根據顯示型別轉換過程中的宣告,來檢查裝箱物件的型別,如果不是,丟擲InvalidCastException異常。

3.將該值從例項複製到值型別變數中。

現在舉個例子說明:

class BoxAndUnboxTest
    {
        static void Main()
        {
            int i = 123;
            object o = i;//First Boxing
            i = 456;
            Console.WriteLine(i+//second boxing
                ","+
                (int)o);//third Boxing and first boxing
        }
    }

相關推薦

C#裝箱(boxing)(unboxing) ()

裝箱操作: 1.從託管堆中分配好記憶體。分配的記憶體是值型別的各個欄位所需要的記憶體量加上同步塊和方法表指標所需的記憶體量 2.值型別的欄位複製到新分配的堆記憶體中。 3.返回物件的地址,這個地址是是一個物件的引用,值型別是一個引用型別。 拆箱操作: 1.檢查裝箱引用,如果為

[DotNet]深入理解C#的裝箱

csharp 簡單 部分 nbsp pre 需要 避免 兩個 value 裝箱和拆箱是值類型和引用類型之間相互轉換是要執行的操作。 1. 裝箱在值類型向引用類型轉換時發生 2. 拆箱在引用類型向值類型轉換時發生 光上述兩句話不難理解,但是往深處了解,就需要一些篇幅來

c#的裝箱及值類型和引用類型

int 什麽 容易 將在 shc 表達 需要 code 引用 裝箱:它允許根據值類型創建一個對象,然後使用對這新對象的一個引用。 int i = 5; object o = i; int j = (int)o; 裝箱:運行時將在堆上創建一個包含值5的對象(它是一個普通對象)

深入理解C#的裝箱

裝箱和拆箱是值型別和引用型別之間相互轉換是要執行的操作。  1. 裝箱在值型別向引用型別轉換時發生 2. 拆箱在引用型別向值型別轉換時發生 光上述兩句話不難理解,但是往深處瞭解,就需要一些篇幅來解釋了。 我們先看裝箱時都會發生什麼事情,下面是一行最簡單的裝箱程式碼

C#】裝箱

           在生活中,我們都喜歡吃水果。大家都知道水果不但為我們提供豐富的膳食纖維,還有維生素及其它營養。例如:吃草莓培養耐心補充維生素,吃香蕉保持快樂心情,吃葡萄增強免疫抗衰老,吃梨幫助器

關於C#的裝箱的簡單測試例子

 int i = 0;         //裝箱         object obj = i;         Debug.Log(i);         Debug.Log(obj);         i = 10;         Debug.Log(i);    

C# 之裝箱

知識點  值型別。 值型別是在棧中分配記憶體,在宣告時初始化才能使用,不能為null。 值型別超出作用範圍系統自動釋放記憶體。 主要由兩類組成:結構,列舉(enum),結構分為以下幾類: 整型(Sbyte、Byte、Char、Short、Ushort、Int、Uint、Long、Ulong) 浮點型(F

再談C#的裝箱

上一篇寫了一下裝箱拆箱的定義和IL分析,這一篇我們看下使用泛型和不使用泛型引發裝箱拆箱的情況 1. 使用非泛型集合時引發的裝箱和拆箱操作  看下面的一段程式碼: var array = new ArrayList(); array.Ad

C#簡單的操作演示源碼

string 工程 versions version 拆箱 str stat pre ring 把做工程過程中比較好的一些代碼片段珍藏起來,下面的代碼是關於C#中簡單的拆箱操作演示的代碼。 using System; class ConversionSample {

深入理解C#的裝箱、使用非泛型集合時引發的裝箱操作

裝箱和拆箱是值型別和引用型別之間相互轉換是要執行的操作。  1. 裝箱在值型別向引用型別轉換時發生 2. 拆箱在引用型別向值型別轉換時發生 光上述兩句話不難理解,但是往深處瞭解,就需要一些篇幅來解釋了。 我們先看裝箱時都會發生什麼事情,下面是一行最簡單的裝箱程式碼

C#之裝箱

簡介:         我們都知道,C#中的每一種型別要麼是值型別,要麼是引用型別。所以每個物件要麼是值型別的例項,要麼是引用型別的例項。      值型別和引用型別之間的轉換稱為裝箱和拆箱。  

C#的"裝箱"(boxing)與""(unboxing)

/* 作者:耿奕廷    版權所有,轉載時請註明出處及作者    */ 我們知道在C#中,所有的型別都派生自類object,而派生類和繼承類之間可以互相轉換,這就有了“裝箱”與“拆箱”的概念。 裝箱:是指把某一型別的值顯式或隱式的轉換成object類型,或轉成被此型別繼承的

C#——裝箱(boxing)和(unboxing)

突然發現部落格真是個好東西,自己看的內容整理下來,還可以以後檢視     C#統一的型別系統讓任何型別的值都可以當做是一個物件。    C#中每種型別都直接或間接地繼承於object類,object

C#裝箱BoxingUnBoxing

1、什麼是裝箱和拆箱? 簡單來說:      裝箱是將值型別轉換為引用型別 ;拆箱是將引用型別轉換為值型別。(網上廣為流傳) C#中值型別和引用型別的最終基類都是Object型別(它本身是一個引用型別)。也就是說,值型別也可以當做引用型別來處理。而這種機制的底層處理就是通過

C#裝箱

1、什麼是裝箱和拆箱? 簡單的來說: 裝箱就是值型別轉換為引用型別;拆箱就是引用型別轉換為值型別 值型別,包括原型別(Sbyte、Byte、Short、Ushort、Int、Uint、Long、Ulong、Char、Float、Double、Bool、Decimal)、列舉

C# 裝箱[整理]

collect 調用 原理 本質 reger truct 以及 gree gre 1、 裝箱和拆箱是一個抽象的概念 2、 裝箱是將值類型轉換為引用類型 ;拆箱是將引用類型轉換為值類型 利用裝箱和拆箱功能,可通過允許值類型的任何值與O

C# 裝箱[整理](轉)

reger 循環 賦值 c# 通用 不出 mem 功能 數據的操作 //1、 // 裝箱和拆箱是一個抽象的概念 //2、 // 裝箱是將值類型轉換為引用類型 ;拆箱是將引用類型轉換為值類型 // 利用裝箱和拆箱功能,可通過允許值類型的任何值

Java自動裝箱詳解

sans 做的 sys 實例 代碼 而在 byte 裝箱 bsp 在講裝箱與拆箱之前我們要先了解一下這個問題的來源: Java中的類型分為基本類型(Primitive type)和類類型(Class type)兩種: 基本類型包括byte型、char型、short型

詳解Java的自動裝箱(Autoboxing and unboxing)

初始 BE 運算 null 異常 內存 判斷 運行 double 一、什麽是自動裝箱拆箱 很簡單,下面兩句代碼就可以看到裝箱和拆箱過程 1 //自動裝箱 2 Integer total = 99; 3 4 //自定拆箱 5 int totalprim = total;

java裝箱

net chan import HA com 裝箱 ava art spa java中的裝箱與拆箱 ,參考這三個博客,寫的很好 1 http://www.importnew.com/15712.html 2 https://www.cnblogs.com/dol