日期:2014-05-19  浏览次数:20891 次

小问题 发分
#region   Using   directives

using   System;
using   System.Collections.Generic;
using   System.Text;

#endregion

namespace   Ch09Ex03
{
        class   MyClass
        {
                public   int   val;
        }

        struct   myStruct
        {
                public   int   val;
        }

        class   Program
        {
                static   void   Main(string[]   args)
                {
                        MyClass   objectA   =   new   MyClass();
                        MyClass   objectB   =   objectA;
                        objectA.val   =   10;
                        objectB.val   =   20;
                        myStruct   structA   =   new   myStruct();
                        myStruct   structB   =   structA;
                        structA.val   =   30;
                        structB.val   =   40;
                        Console.WriteLine( "objectA.val   =   {0} ",   objectA.val);
                        Console.WriteLine( "objectB.val   =   {0} ",   objectB.val);
                        Console.WriteLine( "structA.val   =   {0} ",   structA.val);
                        Console.WriteLine( "structB.val   =   {0} ",   structB.val);
                        Console.ReadKey();
                }
        }
}

这一段代码最后为什么会输出:20,20,30,40呢


------解决方案--------------------
因为MyClass是值类型的数据。。。。
当你把MyClass objectB = objectA时,其实objectB和lbjectA所存放的都是一个地址。。
它们共用一个值。
无论是改变objectA或objectB时,都会影响另外一个的。。因为它们所存放的只是一个相同的地址。。。通过地址找到了值

为什么struceA和struceB的值会不同呢。。
是因为;在C#中结构属于值类型。。。
------解决方案--------------------
书上说:

对象是引用类型,结构是值类型。

MyClass objectB = objectA;
实际是把地址赋给了objectB

myStruct structB = structA;
是把值赋给了structB

值类型传递的是一个拷贝,就好像给你一带大米;引用类型传递的是一个地址,就好像给你一张纸,纸上写着大米在厨房,你自己去拿


不知道你明白点了没