男人.No boy no cry

彪悍的人生,不需要解釋...

导航

C#中的值与引用-----(二)值类型赋值与引用类型的赋值

Posted on 2005-04-28 16:31  Piccolo Goo  阅读(1483)  评论(1)    收藏  举报

二、值类型的赋值与引用类型的赋值

值类型的变量赋值,是将内存中的真实数据复制一份赋给新的变量。那么在赋值之后内存中就将存在两份一模一样的数据。

Demo

int test1 = 1;
int test2 = test1; // 先将test1的数据复制一份,然后将复制后的新数据交给test2

 

引用类型的变量赋值,也会有一个复制的动作,但是所复制的东西和值类型的赋值中所复制的不一样。值类型的赋值中所复制的是真实的数据(如上面Demo里的整数1),而引用类型的赋值中复制的只是真实数据的内存地址而已(也就是引用本身的值)。所以在引用类型赋值后,内存中会存在两份引用,而真实数据仍然为一份,并且两份引用都指向这同一份的真实数据。如果把识别卡比做引用,员工数据比做内存中的真实数据,识别卡的工号比做真实数据的内存地址,那么引用类型赋值就相当于:新制作一张识别卡,然后填上同样的工号。这样识别卡就有2张了,但HR处该员工信息还是只有同一份。我们可以使用这两张识别卡,而对这两张不同识别卡的使用却会同时影响到同一员工的数据(比如在大餐厅吃饭扣钱)。 
 

Demo

class DemoObject   // 先自己申明一个类,里面有个计数的int变量和一个让int变量加1的方法

    {

         private int count=0;

 

         public void Add()

         {

                count ++;

         }

     }

 

     DemoObject demo1 = new DemoObject();

     demo1.Add();    // 此时demo1count的值变为1

     DemoObject demo2 = demo1;       // 引用复制,demo2count值为1(和demo1的数据一样),而不是0

     demo2.Add();    // 执行该句后,demo2count值为2,而demo1count值也变为了2

demo1.Add();       // 执行该句后,demo1count值为3,而demo2count值也变为了3

从上面的demo可以看出,demo1demo2的操作都是会互相影响的,因为他们所指向的真实数据是同一份的。