- namespace _02深拷贝和浅拷贝
- {
- class MyClass1//声明类1
- {
- public string name;//里面设一个字段,注意:string为引用类型!
- }
- class MyClass2//声明类2
- {
- public int num;
- public MyClass1 Mc;//将类1作为类2的一个字段
- }
- class Program
- {
- static void Main(string[] args)
- {
- MyClass2 mc1 = new MyClass2();//类2首先实例化一个mc1
- mc1.num = 100;
- mc1.Mc = new MyClass1();//这里new一个类1的实例
- mc1.Mc.name = "黑马";//给name赋值!
- //------------------------------------------------------
- MyClass2 mc2 = new MyClass2();//new一个mc2实例
- mc2.num = mc1.num;//将实例1中num的值直接拷贝给了实例2的num;
- mc2.Mc = new MyClass1();//再new一个类1的实例
- mc2.Mc.name = mc1.Mc.name;//这样相当于将name中的值直接复制过来,属于深拷贝!
- //-------------------------------------------------------
- MyClass2 mc3 = new MyClass2();
- mc3.num = mc1.num;//值类型的拷贝都没什么区别
- mc3.Mc = mc1.Mc;//区别就在这儿,这样的拷贝相当于只是mc3.Mc指向发生了改变,只是复制了地址,没有将name中的值真正拷贝过来!
- //例子不好理解的话,可以简单认为深拷贝是将文件整个复制过来,而浅拷贝只是复制了快捷方式!希望对你有帮助!
- }
- }
- }
复制代码 |