志在指尖
用双手敲打未来

c#学习笔记-深度复制 与浅度复制

关于值类型和援用类型:
浅度复制(shallowcopy)只复制值类型(char,int)的值,而关于援用类型不会复制,浅度复制能够经过派生于System.Object的MemberwiseClone()办法来完成,这是一个受维护的办法。由于他并没有思索援用类型成员,因而新对象的援用成员就会指向源对象中的相同成员援用的对象
假如要创立成员的新实例(复制值,而不是复制援用)就需求用到深度复制(deepcopy)
深度复制需求完成一个ICloneable接口,假如运用这个接口需求完成它包含的Clone()办法,这个办法返回一个System.Object的值,C#
下面看下浅度复制:
复制代码
1publicclassCompany
2{
3publicstringvalue{get;set;}
4}
5
6publicclassPhone
7{
8publicstringcolor{get;set;}
9
10publicCompanycompany=newCompany();
11
12publicPhone(stringnewCompany)
13{
14company.value=newCompany;
15}
16
17publicobjectgetCopy()
18{
19returnMemberwiseClone();
20}
21}
复制代码
复制代码
1staticvoidMain(string[]args)
2{
3Phonephone=newPhone(“xiaomi”);
4phone.color=”red”;
5Phonephone1=(Phone)phone.getCopy();
6Console.WriteLine($”phonecompany:{phone.company.value}color:{phone.color}”);
7Console.WriteLine($”phone1company:{phone1.company.value}color:{phone1.color}”);
8
9Console.WriteLine(“浅度复制修正新对象的值”);
10
11phone1.company.value=”huawei”;
12phone1.color=”green”;
13Console.WriteLine($”phonecompany:{phone.company.value}color:{phone.color}”);
14Console.WriteLine($”phone1company:{phone1.company.value}color:{phone1.color}”);
15Console.ReadKey();
16
17}
复制代码
实验现象:
浅度复制在后援用类型修正后,原对象也跟着发作了改动
修正这个问题,能够运用深度复制
复制代码
1publicclassCompany
2{
3publicstringvalue{get;set;}
4}
5
6publicclassPhone:ICloneable
7{
8publicstringcolor{get;set;}
9
10publicCompanycompany=newCompany();
11
12publicPhone(stringnewCompany)
13{
14company.value=newCompany;
15}
16
17publicobjectgetCopy()
18{
19returnMemberwiseClone();
20}
21
22publicobjectClone()
23{
24PhonenewPhone=newPhone(company.value);
25returnnewPhone;
26//newPhone.company.value=this.company.value;
27
28}
29}
复制代码
复制代码
1staticvoidMain(string[]args)
2{
3Phonephone=newPhone(“xiaomi”);
4phone.color=”red”;
5Phonephone1=(Phone)phone.Clone();
6Console.WriteLine($”phonecompany:{phone.company.value}color:{phone.color}”);
7Console.WriteLine($”phone1company:{phone1.company.value}color:{phone1.color}”);
8
9Console.WriteLine(“浅度复制修正新对象的值”);
10
11phone1.company.value=”huawei”;
12phone1.color=”green”;
13Console.WriteLine($”phonecompany:{phone.company.value}color:{phone.color}”);
14Console.WriteLine($”phone1company:{phone1.company.value}color:{phone1.color}”);
15Console.ReadKey();
16
17}

未经允许不得转载:IT技术网站 » c#学习笔记-深度复制 与浅度复制
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载