代码改变世界

回头再学Asp.net系列--基础篇(三)

2011-09-14 16:20  熬夜的虫子  阅读(272)  评论(0编辑  收藏  举报

值类型与引用类型小demo

 

当我们使用引用类型时,我们实际是在处理该类型的指针,而非该类型本身。当我们使用值类型时,我们是在使用值类型本身。听起来很迷糊吧?

同样,例子是最好的描述。

假如我们执行以下的方法:

          public int ReturnValue()
          {
                int x = new int();
                x = 3;
                int y = new int();
                y = x;     
                y = 4;         
                return x;
          }

我们将得到值3,很简单,对吧?

假如我们首先使用MyInt类

     public class MyInt
          {
                public int MyValue;
          }

接着执行以下的方法:

          public int ReturnValue2()
          {
                MyInt x = new MyInt();
                x.MyValue = 3;
                MyInt y = new MyInt();
                y = x;                
                y.MyValue = 4;             
                return x.MyValue;
          }

我们将得到什么?...    4!

为什么?...  x.MyValue怎么会变成4了呢?...  看看我们所做的然后就知道是怎么回事了:

在第一例子中,一切都像计划的那样进行着:

          public int ReturnValue()
          {
                int x = 3;
                int y = x;   
                y = 4;
                return x;
          }

在第二个例子中,我们没有得到"3"是因为变量"x"和"y"都同时指向了堆中相同的对象。
          public int ReturnValue2()
          {
                MyInt x;
                x.MyValue = 3;
                MyInt y;
                y = x;               
                y.MyValue = 4;
                return x.MyValue;
          }

希望以上内容能够使你对C#中的值类型和引用类型的基本区别有一个更好的认识,并且对指针及指针是何时被使用的有一定的基本了解。