读书人

小疑点 发分

发布时间: 2012-01-22 22:38:43 作者: rapoo

小问题 发分
#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

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


不知道你明白点了没

读书人网 >C#

热点推荐