小问题 发分
#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
值类型传递的是一个拷贝,就好像给你一带大米;引用类型传递的是一个地址,就好像给你一张纸,纸上写着大米在厨房,你自己去拿
不知道你明白点了没