型別的裝箱和拆箱

2021-04-28 18:37:55 字數 987 閱讀 5680

c#使用單類層次的單一繼承:所有類都繼承自object基類,而且不可能多重繼承。

但是c#的介面提供了許多多重繼承的功能

型別的裝箱和拆箱

boxing and unboxing types

裝箱(boxing)和拆箱(unboxing)是使值型別(如整數)能夠被當成引用型別(物件)的處理過程。值被「裝箱」到乙個object裡然後「拆箱」回乙個值型別。正是這種處理,使我們可以像示例5-3那樣,對整數呼叫tostring()方法。

裝箱是隱含的

boxing is implicit

裝箱是一種隱含的轉換,將值型別轉成object型別。將乙個值裝箱,將分配乙個object的例項,並將值複製給此例項,如圖5-4所示。

圖5-5:裝箱然後拆箱

要想拆箱成功,被拆箱的物件必須是乙個物件的引用,後一物件是通過對給定型別的值裝箱生成的。裝箱和拆箱的編碼如示例5-4所示。

示例5-4:裝箱和拆箱

#region using directives

using system;

using system.collections.generic;

using system.text;

#endregion

namespace boxing

public class unboxingtest

public static void main()

int i = 123;

//裝箱

object o = i;

// 拆箱(必須顯式)

int j = ( int ) o;

console.writeline( "j: ", j );

示例5-4建立了乙個整數i,在賦值給物件o時隱式將其裝箱。值然後顯式拆箱,又賦給乙個新的int,其值顯示出來。

通常,要在try語句塊中用到拆箱操作,我們會在第11章解釋。如果要拆箱的物件是空值,或另一種型別物件的引用,會丟擲invalidcastexception異常。

裝箱和拆箱,自動裝箱和自動拆箱

以integer的建立為例。裝箱 把基本資料型別轉換成包裝類物件 int integer integer num1 new integer 17 拆箱 把乙個包裝類的物件,轉換成基本型別的變數 integer int int num2 num1.intvalue 自動裝箱 integer num3 ...

裝箱和拆箱

在c 中的有兩種型別的變數 值型別和引用型別。當值型別和引用型別相互轉化時,會發生裝箱和拆箱的過程。這裡有一點要宣告 經過拆箱或裝箱的物件會多出它自己乙份拷貝,如圖所示 從圖可以看出它和它的拷貝不在乙個儲存區域。這也是值型別和引用型別的區別所在。值型別總是在棧中,而引用型別總是在託管堆中。目前j2s...

裝箱和拆箱

裝箱 boxing 和拆箱 unboxing 是c 型別系統中重要的概念。它通過允許任何數值型別的資料被轉換為任何形式型別的物件提供了數值型別和引用型別間的緊密聯絡。裝箱和拆箱使得對在其中任何型別都可以最終被看作物件的型別系統的統一的觀察變為可能。裝箱轉換允許任何數值型別可以隱式地轉換為 objec...