您的位置:首页 > 其它

欢迎使用CSDN-markdown编辑器

2015-10-20 11:06 295 查看
namespace Light_Sharp

{

public class Printor

{

int printID;

public int PrintID

{

get;

set;

}

public Printor(int newID)

{

PrintID = newID;a

}

public object GetCopy()

{

return MemberwiseClone();

}

}

public class program

{

public static void Main(string[] args)

{

Printor print1 = new Printor(13000);

Printor copytprint = (Printor)print1.GetCopy();

print1.PrintID = 12000;

Console.WriteLine("print1 ID:{0}",print1.PrintID);

Console.WriteLine("copyprint ID:{0}",copytprint.PrintID);

Console.ReadKey();

}

}

}


运行程序会得到输出:

print1 ID:12000

copyprint ID:13000

浅复制适用于用于类成员变量没有引用的情况下,如果有引用变量,就要用深复制了。

下面的代码反应了如果成员变量有引用会发生的状况,当我们修改对象print1中carbon的硬度hard时,copyprint中carbon的硬度hard也变成了9,那是因为两个对象中的carbon引用实际上指向

了同一个对象。

输出结果:

print1’s carbon hard:9

copyprint’s carbon hard:9

namespace Light_Sharp

{

public class Carbon

{

int hard;

public int Hard

{

get;

set;

}

public Carbon(int hard)

{

Hard = hard;

}

}

public class Printor

{

public Carbon carbon = new Carbon(10);

int printID;

public int PrintID

{

get;

set;

}

public Printor(int newID)

{

PrintID = newID;

}

public object GetCopy()

{

return MemberwiseClone();

}

}

public class program

{

public static void Main(string[] args)

{

Printor print1 = new Printor(13000);

Printor copytprint = (Printor)print1.GetCopy();

print1.carbon.Hard = 9;

Console.WriteLine("print1's carbon hard:{0}",print1.carbon.Hard);

Console.WriteLine("copyprint's carbon hard:{0}", copytprint.carbon.Hard);

Console.ReadKey();

}

}

}


为了实现深复制,那么该怎么办呢?

其实微软的.NetFramework提供了标准的实现方式——继承ICloneable接口,

该接口有一个Clone()方法,该方法不带任何参数,并且返回一个object类型的对象。

签名跟上面的GetCopy()方法相同。修改Printor类,已实现深复制代码如下:

这里写代码片public class Carbon

{

int hard;

public int Hard

{

get;

set;

}

public Carbon(int hard)

{

Hard = hard;

}

}

public class Printor : ICloneable

{

public Carbon carbon = new Carbon(10);

int printID;

public int PrintID

{

get;

set;

}

public Printor(int newID)

{

PrintID = newID;

}

public object Clone()

{

Printor printorClone = new Printor(PrintID);

printorClone.carbon.Hard = carbon.Hard;

return printorClone;

}

}

public class program

{

public static void Main(string[] args)

{

Printor print1 = new Printor(13000);

Printor copytprint = (Printor)print1.Clone();

print1.carbon.Hard = 9;

Console.WriteLine("print1's carbon hard:{0}",print1.carbon.Hard);

Console.WriteLine("copyprint's carbon hard:{0}", copytprint.carbon.Hard);

Console.ReadKey();

}

}


输出结果:

print1’s carbon hard:9

copyprint’s carbon hard:10
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: