什么是c#的装箱和拆箱

原创 2007年10月05日 12:02:00
装箱和拆箱:使得在C#类型系统中,任何值类型、引用类型和OBJECT类型之间进行转换,我们称这种转化为绑定连接,简单说有此功能后,对任何类型的值都可以看作是object类型。
using System;//装箱
class test
{
 public static void Main()
 {
  int i=10;
  object obj=i;
  if (obj is int) 
  {
   Console.WriteLine(" I is boxing"); //会显示
  }
  i=20; //改变I的值;
  Console.WriteLine("int i={0}",i);//i=20
  Console.WriteLine("obj={0}",obj);//obj=20
 }
}//证明了被装箱的类型的值是作为一个拷贝赋给对象的;

拆箱转换:指将一个对象类型显式地转换成一个值类型,或将一接口类型显式地转换成一个执行该接口的值类型。可以看出拆箱过程正好是装箱过程的逆过程。必须注意,装箱和拆箱转换必须遵循类型兼容原则。
装箱和拆箱:任何值类型、引用类型可以和object(对象)类型之间进行转换。装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(inte***ce-type)。把一个值类型的值装箱,就是创建一个object实例并将这个值复制给这个object,装箱后的object对象中的数据位于堆中,堆中的地址在栈中。被装箱的类型的值是作为一个拷贝赋给对象的。如:

int i = 10;
object obj = i; //隐式装箱
object obj = object(i); //显式装箱
if(obj is int) //int
       Console.WriteLine(“OK”);
Console.WriteLine(obj.GetType()); //System.Int32

有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。

拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如:

int i = 10;
object obj = i;
int j = (int)obj;

有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。

拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如:

int i = 10;
object obj = i;
int j = (int)obj;
 

c#数值类型,转换和装箱拆箱

  • 2011年09月19日 19:32
  • 1.29MB
  • 下载

C#装箱和拆箱(Boxing 和 UnBoxing)

1、什么是装箱和拆箱? 简单来说:       装箱是将值类型转换为引用类型 ;拆箱是将引用类型转换为值类型。(网上广为流传)  C#中值类型和引用类型的最终基类都是Object类型(它本身是一个引用...

C#语言中的装箱和拆箱操作

  • 2010年10月16日 21:42
  • 32KB
  • 下载

C# struct 装箱拆箱例子

值类型:拆箱、装箱 struct是值类型struct和class的区别 类是引用类型,struct是值类型 在托管堆上创建类的实例,在栈上创建struct实例 类实例的赋值,赋的是引用地址,stru...
  • myinc
  • myinc
  • 2017年01月21日 21:39
  • 313

CLR via c# 装箱与拆箱

using System; namespace 拆箱装箱 { class Program { class someref { public Int32 x;} ...
  • fxqcn
  • fxqcn
  • 2011年10月10日 09:05
  • 555

C#基础知识系列二(值类型和引用类型、可空类型、堆和栈、装箱和拆箱)

前言   之前对几个没什么理解,只是简单的用过可空类型,也是知道怎么用,至于为什么,还真不太清楚,通过整理本文章学到了很多知识,也许对于以后的各种代码优化都有好处。   本文的重点就是:值...

C#装箱与拆箱

C#中的数据类型包括值类型、引用类型和指针类型,而指针类型只有在不安全代码中使用。值类型包括简单类型、结构和枚举,引用类型包括类、接口、委托、数组和字符串等。为了保证效率,值类型是在栈中分配内存,在声...
  • hippig
  • hippig
  • 2012年07月08日 17:35
  • 674

C#中的装箱与拆箱

C#中数据类型分为两种:数值类型和引用类型,两种类型相互转换过程中就涉及到装箱与拆箱操作,当数值类型转换为引用类型就称之为装箱,相反过程为拆箱。装箱操作为: 1.       在堆上分配一块内存,用于...

C#的装箱拆箱

深入理解C#的装箱和拆箱装箱拆箱的定义装箱和拆箱是值类型和引用类型之间相互转换时要执行的操作。 1. 装箱在值类型向引用类型转换时发生。 2. 拆箱在引用类型向值类型装换是发生。光上述两句话不难理...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:什么是c#的装箱和拆箱
举报原因:
原因补充:

(最多只允许输入30个字)