C# 裝箱和拆箱

2018-01-16 03:53 更新

C# 裝箱和拆箱

對象類型

object System.Object 是所有類型的最終基類。

任何類型都可以upcast到對象。

以下代碼創(chuàng)建一個類Stack以提供First-In-Last_Out數(shù)據(jù)結(jié)構(gòu)。

public class Stack {
    int position; 
    object[] data = new object[10];
    public void Push (object obj) { data[position++] = obj; }
    public object Pop() { return data[--position]; } 

} 

因為Stack使用對象類型,我們可以推送和彈出任何類型到和從堆棧。

Stack stack = new Stack(); 
stack.Push ("CSS"); 
string s = (string) stack.Pop(); // Downcast, so explicit cast is needed 
Console.WriteLine (s);

裝箱和拆箱

在值類型和對象之間進行轉(zhuǎn)換時,CLR必須執(zhí)行裝箱和取消裝箱的過程。

裝箱

裝箱是將值類型實例轉(zhuǎn)換為引用類型實例。

引用類型可以是對象類或接口。

int x = 1; 
object obj = x; // Box the int 

拆箱

拆裝箱會將操作轉(zhuǎn)換為原始值類型,從而反轉(zhuǎn)操作:

int y = (int)obj; // Unbox the int 

拆箱需要顯式強制轉(zhuǎn)換。

例如,以下引發(fā)異常,因為long不完全匹配int:

object obj = 1; // 1 is inferred to be of type int 
long x = (long) obj; // InvalidCastException 

以下代碼執(zhí)行取消裝箱和強制轉(zhuǎn)換:

object obj = 9; 
long x = (int) obj; 


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號