C#的装箱和拆箱
using System;
namespace testBoxingApp
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
//
// TODO: 在此处添加代码以启动应用程序
//
/*
* 在理解装箱和拆箱的概念之前,现了解一下有关的基本概念:
* 1)在.net中的通用类型系统(common type system)中,所有的类型都是对象,都是派生自system.object。
* 2)CTS支持两组类型:值类型和引用类型。值类型的变量包含实际数据,会在内存中分配空间;引用类型的变量类型指针,而没有在
* 内存中分配空间。
* 3)装箱:将值类型转换成引用类型的过程(隐式转换)
* 4)拆箱:将引用类型转换成值类型的过程(显示转换)
由于在C#2.0中引入了泛型的概念,取代了装箱和拆箱,所以这里就不再赘述了。
*/
short i = 1;
object ōbjectOne = i; //装箱,隐式类型转换
Console.WriteLine ("{0} Boxing to object:{1}",ObjectOne.GetType(),ObjectOne);
short j;
j = (short)ObjectOne; //拆箱,显示类型转换
Console.WriteLine ("object Unboxing to short :{0}",j);
try //错误的拆箱
{
int k;
k = (int)ObjectOne;
Console.WriteLine ("object Unboxing to int: {0}",k);
}
catch(InvalidCastException ex){
Console.WriteLine ( ex.Message );
}
object ōbjectTwo = new Class2 ();
try //错误的拆箱
{
short m;
m = (short)ObjectTwo;
Console.WriteLine ("object Unboxing to short :{0}",m);
}
catch(InvalidCastException ex)
{
Console.WriteLine ( ex.Message );
}
Class2 aRef; //Class2的一个引用变量
aRef = (Class2) ObjectTwo;
Console.WriteLine (aRef.s );
}
}
class Class2
{
public short s;
public Class2()
{
Console.WriteLine ("A Class2 Object!");
s = 10;
}
}
}