我知道类是引用类型,所以ObjectA和ObjectB的值应该是一样的,可是为什么运行后A和B的值都是20,而不是10呢?我是按照=运算符的规则来理解的,还希望哪位大虾可以指点一下using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication36
{
class Myclass
{
public int val;
}
class Program
{
static void Main(string[] args)
{
Myclass ObjectA = new Myclass();
Myclass ObjectB = ObjectA;
ObjectA.val = 10;
ObjectB.val = 20;
Console.WriteLine("{0}", ObjectA.val);
Console.WriteLine("{0}", ObjectB.val);
Console.ReadKey();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;namespace ConsoleApplication36
{
class Myclass
{
public int val;
}
class Program
{
static void Main(string[] args)
{
Myclass ObjectA = new Myclass();
Myclass ObjectB = ObjectA;
ObjectA.val = 10;
ObjectB.val = 20;
Console.WriteLine("{0}", ObjectA.val);
Console.WriteLine("{0}", ObjectB.val);
Console.ReadKey();
}
}
}
Myclass ObjectB = ObjectA;//你声明了一个ObjectB 指向了刚刚那个堆上的地址,ObjectB 和ObjectA都指向同一个地址
ObjectA.val = 10;//堆上的一个四字节的地方被你赋予了10这个值
ObjectB.val = 20;//你又将他改为了20
所以你改其中的一个值,那么另外一个也跟着变了。
想实现一个20,一个30的话,那就序列化,然后反序列化创建一个副本。