codecamp

C# 装箱和拆箱

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; 


C# 继承的成员
C# GetType和typeof
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }