您的位置:首页 > 其它

浅拷贝-基础理解

2018-01-17 11:30 197 查看
public class CopyTest
{
public static void TestCopy()
{
/*
*  深拷贝:指的是拷贝一个对象时,不仅仅把对象的引用进行复制,还把该对象引用的值也一起拷贝。
*         深拷贝之后的对象是相互独立的,人生有了独立的轨迹,不在互相影响。
*  
*   浅拷贝:指的是拷贝一个对象时,仅仅拷贝对象的引用进行拷贝,但是拷贝对象和源对象还是引用同一份实体。
*          浅拷贝的对象似与影子,都是同一个实体的,随便动一个,其他都会保持一致
*/
HotDrink hotDrink1 = new HotDrink() {  Milk=5, Sugar=3};
HotDrink hotDrink2 = hotDrink1;
HotDrink hotDrink3 = new HotDrink();
hotDrink3 = hotDrink1;
HotDrink hotDrink4 = new HotDrink();
hotDrink4.Milk = hotDrink1.Milk;
hotDrink4.Sugar = hotDrink1.Sugar;

Console.WriteLine("初始化值:");
Console.WriteLine("         hotDrink2 = hotDrink1;");
Console.WriteLine("         hotDrink2 = hotDrink1;");
Console.WriteLine("         HotDrink hotDrink3 = new HotDrink(); hotDrink3 = hotDrink1;");
Console.WriteLine("         HotDrink hotDrink4 = new HotDrink(); hotDrink4.Milk = hotDrink1.Milk;");

Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}", hotDrink1.Milk, hotDrink1.Sugar);
Console.WriteLine("hotDrink2 的 Milk = {0},Sugar = {1}", hotDrink2.Milk, hotDrink2.Sugar);
Console.WriteLine("hotDrink3 的 Milk = {0},Sugar = {1}", hotDrink3.Milk, hotDrink3.Sugar);
Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar);
Console.WriteLine();

hotDrink2.Milk = 5 * 2;
hotDrink2.Sugar = 3 * 2;

hotDrink3.Milk = 5 * 3;
hotDrink3.Sugar = 3 * 3;

hotDrink4.Milk = 5 * 4;
hotDrink4.Sugar = 3 * 4;

Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}",hotDrink1.Milk,hotDrink1.Sugar);
Console.WriteLine("hotDrink2 的 Milk = {0},Sugar = {1}", hotDrink2.Milk, hotDrink2.Sugar);
Console.WriteLine("hotDrink3 的 Milk = {0},Sugar = {1}", hotDrink3.Milk, hotDrink3.Sugar);
Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar);
Console.WriteLine();
hotDrink1.Milk = 11;
hotDrink1.Sugar = 4;

hotDrink4.Milk = 44;
hotDrink4.Sugar = 88;

Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}", hotDrink1.Milk, hotDrink1.Sugar);
Console.WriteLine("hotDrink2 的 Milk = {0},Sugar = {1}", hotDrink2.Milk, hotDrink2.Sugar);
Console.WriteLine("hotDrink3 的 Milk = {0},Sugar = {1}", hotDrink3.Milk, hotDrink3.Sugar);
Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar);

Console.WriteLine();
hotDrink4.Milk = 11;
hotDrink4.Sugar = 4;

Console.WriteLine("hotDrink1 的 Milk = {0},Sugar = {1}", hotDrink1.Milk, hotDrink1.Sugar);
Console.WriteLine("hotDrink4 的 Milk = {0},Sugar = {1}", hotDrink4.Milk, hotDrink4.Sugar);

Console.WriteLine("hotDrink1 equals(==) hotDrink4? {0}", hotDrink1 == hotDrink4);
Console.WriteLine();
Console.WriteLine("hotDrink1 equals(Equals) hotDrink4? {0}", hotDrink1.Equals( hotDrink4));
Console.WriteLine();

Console.WriteLine("hotDrink1 equals(==) hotDrink2? {0}", hotDrink1 == hotDrink2);
Console.WriteLine();
Console.WriteLine("hotDrink1 equals(Equals) hotDrink4? {0}", hotDrink1.Equals(hotDrink2));

Console.WriteLine("hotDrink2,hotDrink3都是浅拷贝(shallow copy,System.Object 的MemberwiseClone()),操作hotDrink1,hotDrink2,hotDrink3任意一个值,都会一起更改,其地址一样。");
Console.WriteLine("hotDrink4表现和深拷贝一致(deep copy),简单可以通过ICloneable接口实现,复杂的可以通过反射、序列化,表达式树来实现深拷贝。");

Console.ReadLine();
}
}


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