.NET开发

本类阅读TOP10

·NHibernate快速指南(翻译)
·vs.net 2005中文版下载地址收藏
·【小技巧】一个判断session是否过期的小技巧
·VB/ASP 调用 SQL Server 的存储过程
·?dos下编译.net程序找不到csc.exe文件
·通过Web Services上传和下载文件
·学习笔记(补)《.NET框架程序设计(修订版)》--目录
·VB.NET实现DirectDraw9 (2) 动画
·VB.NET实现DirectDraw9 (1) 托管的DDraw
·建站框架规范书之——文件命名

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
装箱和拆箱

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

在C#中的有两种类型的变量:值类型和引用类型。当值类型和引用类型相互转化时,会发生装箱和拆箱的过程。这里有一点要声明:经过拆箱或装箱的对象会多出它自己一份拷贝,如图所示:
装箱和拆箱
从图可以看出它和它的拷贝不在一个存储区域。这也是值类型和引用类型的区别所在。值类型总是在栈中,而引用类型总是在托管堆中。(目前J2SE5.0也支持了装箱和拆箱,但是我目前不知道是否和C#一样)。为了进一步理解看下面例子:
 struct Point{
  public int x;
  public int y;
 }

static void Main(){
    Point p;
    p.x=10;
    p.y=20;

   Object o=p;//box. 将值类型从栈中拷贝到堆中。

   /************************************************************************/
   /*
    * 从托管堆中将对象拷贝到栈中。
    *                                                                      */
   /************************************************************************/
   Point p2=(Point)p;
   Console.WriteLine(“p2.x:="+p2.x+  “      p2.y:=“+p2.x);

   p.x=16;
   p.y=34;

   Console.WriteLine(“p2.x:="+p2.x+  “      p2.y:=“+p2.x);

   Console.WriteLine(“p.x:="+p.x+  “      p.y:=“+p.x);
}

输出结果为:
p2.x:=10;p2.y=20;
p2.x:=10;p2.y=20;
p.x:=16;p.y=34;

可知,变量经过拆箱/装箱后,得到是自己的另一份拷贝。




相关文章

相关软件