/* 作者:耿奕廷 版权所有,转载时请注明出处及作者 */
我们知道在C#中,所有的类型都派生自类object,而派生类和继承类之间可以互相转换,这就有了“装箱”与“拆箱”的概念。
装箱:是指把某一类型的值显式或隐式的转换成object类型,或转成被此类型继承的接口。装箱后,这个object类的值在内存中heap区,是原类型的一个拷贝。如:
int i=2;
string str="Hello";
object objstr=str; //隐式
object objint=(object)i; //显式
有意思的是被装箱后可以用obj.ToString()来打印原值,如 Console.WriteLine(objstr.ToString())显示的是Hello。
拆箱:是指把装箱后的object类型显式转成原类型。这时可以用is运算符或GetType()来判断object的原类型。如
int n=(int)objint;
int s=(string)objstr;
if(objint is int) Console.WriteLine("Yeah!");
if(objstr.GetType().ToString()=="System.String") Console.WriteLine("OK");
拆箱注意:
1. 如拆箱后没有转成原类型,编译时不会出错,但运行会出错。所以拆箱后转换类 型 一定要正确。
2.用GetType().ToString()判断时一定要使用类型全称,如:System.String 而不要用String