因为类的实例是引用类型,要想用原有的类中的实例的数据的话,既要想创建原对象的一个副本的话,只能用clone方法。 
Clone方法分为深clone和浅clone 
在C#中提供了浅clone的方法,即为MemberwiseClone()

 class Program
{
static void Main(string[] args)
{
Person p = new Person() { Age=, Name="张三" };
Person p2 = (Person)p.Clone();
p2.Name = "李四";
Console.WriteLine("p.Name="+ p.Name);
Console.WriteLine("p2.Name=" + p2.Name);
Console.ReadKey(); }
}
public class Person:System.ICloneable
{
public string Name { get; set; }
public int Age { get; set; } public object Clone()
{
return this.MemberwiseClone();
}
}

输出结果:

MemberwiseClone()方法执行的只是浅层拷贝。而深层拷贝要递归的拷贝其字段所引用的所有对象。

深克隆:即,要在它的每一个包含的类中实现浅Clone

public class DeepClone : System.ICloneable
{
Person g;
Person b;
public Object Clone()
{
DeepClone dc = (DeepClone)this.MemberwiseClone();
dc.g = (Person)(this.g.Clone());
dc.b = (Person)(this.b.Clone());
return dc;
}
}

最新文章

  1. 数据访问模式:Identity Map(标识映射)模式
  2. android-解决EditText的inputType为Password时, 字体不一致的问题
  3. hdu----(2848)Repository(trie树变形)
  4. DTCMS清除 &
  5. [原]Unity3D深入浅出 - 认识开发环境中的Project面板
  6. Java基础知识强化37:StringBuffer类之StringBuffer的构造方法
  7. 自定义清除重复uses-permission申明的AS插件
  8. linux命令之ifconfig详细解释
  9. VirtualBox安装linux mint教程
  10. C# tostring
  11. input type="file"指定文件类型为excel
  12. Windows10配置JDK环境变量
  13. Cesium 中两种添加 model 方法的区别
  14. Apartment 2019:(1)创建墙体
  15. 用 pyinstaller 打包含xpinyin 库的Python程序
  16. K8S Calico
  17. JS数组的需要注意的问题
  18. (二)创建ROS工作空间
  19. Java多线程之Callable接口与Runnable的实现以及选择
  20. kettle教程一

热门文章

  1. SP1811 LCS - Longest Common Substring
  2. Educational Codeforces Round 59 (Rated for Div. 2)
  3. 10.8 wtx模拟题题解
  4. node mysql问题:Client does not support authentication protocol requested by server; consider upgrading MySQL client!
  5. 【STL基础】vector
  6. 异步解决方案(三)Promise
  7. Linux中***配置
  8. partial、struct、interface与C#和CLR的关系
  9. vs如何在Windows身份验证下调试Web项目
  10. poj1840 五项式等于0(哈希)