C# 装箱和拆箱

2018-01-16 03:53 更新

C# 装箱和拆箱

对象类型

object System.Object 是所有类型的最终基类。

任何类型都可以upcast到对象。

以下代码创建一个类Stack以提供First-In-Last_Out数据结构。

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);

装箱和拆箱

在值类型和对象之间进行转换时,CLR必须执行装箱和取消装箱的过程。

装箱

装箱是将值类型实例转换为引用类型实例。

引用类型可以是对象类或接口。

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

拆箱

拆装箱会将操作转换为原始值类型,从而反转操作:

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

拆箱需要显式强制转换。

例如,以下引发异常,因为long不完全匹配int:

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

以下代码执行取消装箱和强制转换:

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


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号