一个C#中浅复制(shallow copy)/深复制(deep copy)的例子
2011-12-30 20:05
309 查看
[Serializable] public class User : ICloneable { public string name; public string desc; public string remark; public User() { } protected User(User u) { name = u.name; desc = u.desc; remark = u.remark; } object ICloneable.Clone() { return base.MemberwiseClone(); } public User Clone() { return base.MemberwiseClone() as User; //return new User(this); } public User Clone(bool IsDeepCopy) { using (MemoryStream ms = new MemoryStream(1000)) { BinaryFormatter bf = new BinaryFormatter(null, new StreamingContext(StreamingContextStates.Clone)); bf.Serialize(ms, this); ms.Seek(0, SeekOrigin.Begin); User u = bf.Deserialize(ms) as User; ms.Close(); return u; } } } public class Guest : User { public string IPAddress; public Guest() { } public Guest(User u) : base(u) {} public Guest(Guest g) : base(g) { IPAddress = g.IPAddress; } }
User admin = new User() { name = "admin", desc = "管理员", remark = "管理员" }; User admin1 = new User() { name = "admin1", desc = "管理员", remark = "管理员" }; /*问题1:如果大多数属性一样,只有一个属性不一样。我想直接复制对象里的属性,然后再修改不一样的属性, 我可以这样写吗?如下: User admin2 = admin; admin2.name = "admin2";*/ User admin2 = admin.Clone(); admin2.name = "admin2"; /*问题二:我现在想通过子类去复制父类的属性,然后再增加自己的属性,可以吗?比如: User guest = new User() { name = "guste", desc = "游客", remark = "游客" }; Guest guest1 = guest; guest1.IPAddress = "192.168.168.3"; Guest guest2 = guest; guest1.IPAddress = "192.168.168.5";*/ User guest = new User() { name = "guste", desc = "游客", remark = "游客" }; Guest guest1 = new Guest( guest); guest1.name = "guest1"; guest1.IPAddress = "192.168.168.3"; Guest guest2 = new Guest(guest); guest2.name = "guest2"; guest2.IPAddress = "192.168.168.5";
相关文章推荐
- C#中的浅复制(shallow copy),深复制(deep copy) 及 ICloneable
- .NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(一)
- 分享一个C#使用AT指令控制语音猫的例子
- 写一个简单的C#反射的例子(附有源码)
- C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介
- 一个简单的小例子让你明白c#中的委托-终于懂了!
- c#用一个线程同步的简单例子
- 用程序把word模板中的一个表格复制为多个表格然后填充数据(工资单的例子)
- C# 关于委托和事件的妙文:通过一个例子详细介绍委托和事件的作用;Observer模式简介
- CodeProject - 在C#使用SHGetFileInfo获取(管理)文件或者文件夹图标(C#封装Win32函数的一个例子)
- 转一个简单的C#多线程间同步的例子
- C# hook的一个简单例子
- c#+Winform实现自定义的“复制、粘贴”右键快捷菜单,多个控件共享使用一个右键菜单。
- 一个C#中webservice的初级例子(一)
- c#项目中遇到的add event 的一个小例子
- 一个C#线程间通讯的小例子
- 一个用C#操作OpenLDAP的例子
- .NET(C#) Internals: 以一个数组填充的例子初步了解.NET 4.0中的并行(一)
- C# 关于反射类[System.Reflection]的一个小例子
- 【转】一个C#中webservice的初级例子(一)