本帖最后由 ShowStyle 于 2013-1-10 11:14 编辑
这个问题我刚好前几天看书看到了,
我来给你讲解下,希望你能明白,
咱们都知道,一个对象,有引用类型和值类型,对吧,如果你要复制一个对象,如果是引用类型的话,例
public class person
{
public string Name;
public int Age;
}
class Program
{
//9、 让用户输入一句话,找出所有e的位置。
static void Main(string[] args)
{
person p1 = new person();
p1.Name = "小强";
p1.Age = 20;
person p2 = new person();
p2 = p1;
p1.Age = 18;
p1.Name = "张三";
Console.WriteLine("p1的名字{0},p1的年纪{1}。p2的名字{2},p2的年纪{3}", p1.Name, p1.Age, p2.Name, p2.Age);
Console.ReadKey();
}
}
这个例子你可以看出,p2其实和p1用的是同一块个内存地址,p1的指针和p2的指针都指向同一块内存,所以打印出来的是一样的值。所以p1或者p2只要更改他们的字段,两个都会跟着变,
深复制的话,就好像值类型的复制一样的
int i=10;
int b=i;
i=5;
输出的话 i=5; b=10;
深复制实现方法
public class person : ICloneable
{
public string Name;
public int Age;
public object Clone()
{
person p = new person();
p.Name = this.Name;
p.Age = this.Age;
return p;
}
}
class Program
{
//9、 让用户输入一句话,找出所有e的位置。
static void Main(string[] args)
{
person p1 = new person();
p1.Name = "小强";
p1.Age = 20;
person p2 = new person();
p2 = p1.Clone() as person;
p1.Name = "张三";
p1.Age = 10;
Console.WriteLine("p1的名字{0},p1的年纪{1}。p2的名字{2},p2的年纪{3}", p1.Name, p1.Age, p2.Name, p2.Age);
Console.ReadKey();
}
}
微软提供一个ICloneable 接口 要深复制,必须实现其Clone()方法,
希望你能明白 我也是刚学到,顺便要报读,来拿点技术分,
|