原型模式 对象深浅复制
2010-04-04 22:57
351 查看
对象的克隆:就是对象实例化的拷贝,在实际应用中我们其实就用到了对象拷贝,例如值类型的赋值操作,引用类型的相互赋值,值类型的装箱操作等,其实这些都属于对象的克隆操作。不是所有的对象实例都可以被克隆,它必须实现一个接口:ICloneable接口。该接口的定义:
对象的克隆可以分两种:深拷贝、浅拷贝。
浅拷贝:拷贝时值类型拷贝到新的实例,对于引用类型则只拷贝引用。
深拷贝:拷贝对象和源对象是完全不同的两个实体,只是这两个实体的内容一致而已,也就是说不但引用改变了,而且实体也被复制了一份。
浅复制(浅拷贝)Demo
Clone方法通过调用基类System.Object的受保护方法MemberwiseClone实现Array类型的浅拷贝。因为,在.NET中,一切方法都继承与System.Object 类,所以开发人员可以通过调用MemberClone方法来实现自定义类型的浅拷贝。
自定义类型实现拷贝Demo:
实现浅拷贝:
代码
public interface ICloneable { object Clone(); }
对象的克隆可以分两种:深拷贝、浅拷贝。
浅拷贝:拷贝时值类型拷贝到新的实例,对于引用类型则只拷贝引用。
深拷贝:拷贝对象和源对象是完全不同的两个实体,只是这两个实体的内容一致而已,也就是说不但引用改变了,而且实体也被复制了一份。
浅复制(浅拷贝)Demo
args) { Student s1 = new Student("Jone", 23)] 值类型的赋值其实就是一种典型的深拷贝:
Public object Clone() { return base.MebmberwiseClone(); }
Clone方法通过调用基类System.Object的受保护方法MemberwiseClone实现Array类型的浅拷贝。因为,在.NET中,一切方法都继承与System.Object 类,所以开发人员可以通过调用MemberClone方法来实现自定义类型的浅拷贝。
自定义类型实现拷贝Demo:
实现浅拷贝:
代码
class Enrollment : ICloneable { public List<Student> students = new List<Student>(); public void ShowEnrollmentInfo() { Console.WriteLine("以下是所有登记学生的名单:"); foreach (Student item in students) { Console.WriteLine("{0}'s age is {1}",item.Name,item.Age); } Console.Read(); } public Enrollment() { } public Enrollment(List<Student> studentList) { foreach (Student item in studentList) { students.Add(item); } } #region ICloneable 成员 public object Clone() { return new Enrollment(students);//浅拷贝 } #endregion }
相关文章推荐
- 分析一下 原型模式的 UML 类图 。 复制对象, 深浅拷贝 月经贴 ,请回避
- 原型模式之深浅复制
- java设计模式---Prototype Pattern---原型模式(复制建立对象)
- 原型模式中的深浅复制
- 原型模式(Prototype)以及深浅复制
- 原型模式深浅复制
- 原型模式(ProtoType) - Java里的对象复制
- 设计模式学习笔记九:原型模式(和深浅复制)
- Java设计模式_创建型_原型模式_复制对象及状态
- js原生设计模式——7原型模式之真正的原型模式——对象复制封装
- 设计模式学习笔记九:原型模式(和深浅复制)
- 设计模式之原型模式——复制建立对象实例
- 对象创建型模式之原型模式
- js 创建对象的三种方式——工厂模式、构造函数模式、原型模式
- 原型模式-Prototype Pattern 对象的克隆——原型模式(二):工作周报的原型模式解决方案
- 原型模式——javascript的面向对象
- 理解并实现原型模式-实现ICloneable接口.理解深浅拷贝 转
- javascript (对象定义)原型模式
- 设计模式之对象创建型 — prototype 原型模式
- 对象的克隆——原型模式