描述C# ICloneable 接口

开发 后端
本文介绍C# ICloneable 接口包含一个成员 Clone,它用于支持除 MemberwiseClone 所提供的克隆之外的克隆。

实现C# ICloneable 接口,自定义拷贝功能。
C# ICloneable 接口,支持克隆,即用与现有实例相同的值创建类的新实例。
C# ICloneable 接口包含一个成员 Clone,它用于支持除 MemberwiseClone 所提供的克隆之外的克隆。Clone 既可作为深层副本实现,也可作为浅表副本实现。在深层副本中,所有的对象都是重复的;而在浅表副本中,只有顶级对象是重复的,并且顶级以下的对象包含引用。 结果克隆必须与原始实例具有相同的类型或是原始实例的兼容类型。
代码实现如下:

  1. publicclassPerson:ICloneable  
  2. {  
  3. publicintAge{get;set;}  
  4. publicstringAddress{get;set;}  
  5. publicNameName{get;set;}  
  6.  
  7. publicobjectClone()  
  8. {  
  9. Persontem=newPerson();  
  10. tem.Address=this.Address;  
  11. tem.Age=this.Age;  
  12.  
  13. tem.Name=newName(this.Name.FristName,this.Name.LastName);  
  14.  
  15. returntem;  
  16. }  
  17. }  
  18.  
  19. publicclassName  
  20. {  
  21. publicName(stringfrisName,stringlastName)  
  22. {  
  23. FristName=frisName;  
  24. LastName=lastName;  
  25. }  
  26. publicstringFristName{get;set;}  
  27. publicstringLastName{get;set;}  

大家可以看到,Person类继承了C# ICloneable 接口并手动实现了其Clone方法,这是个简单的类,试想一下,如果你的类有成千上万个引用类型成员(当然太夸张,几十个还是有的),这是不是份很恐怖的劳力活?

序列化/反序列化类实现

不知道你有没有注意到DataSet对象,对于他提供的两个方法:
DataSet.Clone 方法,复制 DataSet 的结构,包括所有 DataTable 架构、关系和约束。不要复制任何数据。
新 DataSet,其架构与当前 DataSet 的架构相同,但是不包含任何数据。注意 如果已创建这些类的子类,则复本也将属于相同的子类。
DataSet.Copy 方法复制该 DataSet 的结构和数据.

新的 DataSet,具有与该 DataSet 相同的结构(表架构、关系和约束)和数据。注意如果已创建这些类的子类,则副本也将属于相同的子类。
好像既不是浅拷贝,又不是深拷贝,是不是很失望?但是两个结合起来不是我们要的深拷贝吗?看看DataSet的实现,注意序列化接口:ISerializable

【编辑推荐】

  1. C#调用Windows API函数
  2. 详解C#调用Outlook API
  3. C#连接Access、SQL Server数据库
  4. 介绍C#调用API的问题
  5. C#调用Excel与附加代码
责任编辑:佚名 来源: IT168
相关推荐

2009-08-07 08:53:52

C# ICloneab

2009-08-31 13:18:09

C# IWebMess

2009-09-04 13:22:31

C#实现多个接口

2009-08-13 17:04:09

C#语言C#程序

2009-08-17 16:32:34

C# Anonymou

2009-08-31 18:32:01

C# ListBoxE

2009-08-18 17:41:22

C# ListView

2009-08-26 17:49:36

C# readonly

2009-08-20 09:30:03

C#开发WinForm

2009-08-03 16:45:02

C#异步Socket

2009-08-19 10:09:21

C#和C++

2009-08-24 11:02:52

C#接口映射

2009-08-24 09:55:26

C#接口转换

2009-09-07 14:33:02

C# switch语句

2009-09-01 18:25:32

C#结构实例

2009-09-04 11:15:07

选择C#构造函数

2009-08-21 17:31:58

C#垃圾回收

2009-08-28 09:30:48

C#命名属性

2009-09-02 13:01:11

C#多路广播

2009-09-16 09:01:40

C#多维数组
点赞
收藏

51CTO技术栈公众号