`
jdlsfl
  • 浏览: 156398 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#复制对象的示例

阅读更多

编写一个类可以使用方法GetCopy()返回它本身的一个副本,这个方法应使用派生与System.Object的MemberwiseClone()方法.给该类添加一个简单的属性:

        /// <summary>
        /// 复制对象
        /// </summary>
        /// <returns>返回它本身的一个副本</returns>
        public object GetCopy()
        {
            return MemberwiseClone();
        }

受保护的MemberwiseClone()方法返回目前对象的一个“影子拷贝”,该方法不能被子类重写。“影子拷贝”仅仅是对象的一份按位拷贝,其含义是对对象内的值类型变量进行赋值拷贝,对其内的引用类型变量进行句柄拷贝,也就是拷贝后的引用变量将持有对同一块内存的引用。相对于“影子拷贝”的是深度拷贝,它对引用类型的变量进行的是值复制,而非句柄复制。例如X是一个含有对象A,B引用的对象,而对象A又含有对象M的引用。Y是X的一个“影子拷贝”。那么Y将拥有同样的A,B的引用。但对于X的一个“深度拷贝”Z来说,它将拥有对象C和D的引用,以及一个间接的对象N的引用,其中C是A的一份拷贝,D是B的一份拷贝,N是M的一份拷贝。深度拷贝在C#里通过实现ICloneable接口(提供Clone()方法)来完成。

分享到:
评论

相关推荐

    C#23种设计模式_示例源代码及PDF

    原始模型模式: 原始模型模式 通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原 型对象的方法创建出更多同类型的对象。 原始模型模式允许动态的增加或减少产品类, 产品 类不需要非得有任何事先...

    C#基于表达式(Expression)实现对象深拷贝

    C#基于表达式(Expression)实现对象深拷贝,包含了核心类及示例数据。这是一个比较简单的帮助类,可作学习参考

    C#Map映射各个方式性能大比拼

    C#Map映射各个方式性能大比拼,主要测试了各种方式情况下,由一个对象生成另一个相同对象副本,1是列举了常用方式;2是各个方式的性能分析;如果你是喜欢深究其原理的C#开发者,此示例绝对值得你拥有。

    C#中类和结构的区别 -- 示例详解

    1.虽然结构与类的类型不一样,可是他们的基类型都是对象(object),c#中所有类型的基类型都是object 2.虽然结构的初始化也使用了New 操作符可是结构对象依然分配在堆栈上而不是堆上,如果不使用“新建”(new),那么...

    c# 示例 点击按钮打开图片-有错误处理

    点击按钮后,实例化一个openFileDialog 类对象,然后打开用户选中的图片。 并且可以根据图片的大小调节button的长度以及窗口的大小 添加了错误处理。当用户选择非图片文件时,会有textbox进行提示。

    C# 3.0完全自学宝典 (F)

    示例描述:学习C#面向对象开发实例。 AnimalPerson 演示C#类的使用 Anonymous 演示匿名类的使用 ClsIndexeer 演示类索引器的使用 ExtMethod 演示扩展方法的使用 Inherit 演示类继承的实例 NewMethod 演示new...

    写给大家看的面向对象编程书(第3版).[美]Matt Weisfeld(带详细书签).pdf

    5.6.3 提供一种复制和比较对象的方法 73 5.6.4 让作用域尽可能小 73 5.6.5 类应当对自己负责 74 5.7 设计时充分考虑可维护性 75 5.7.1 使用迭代 76 5.7.2 测试接口 76 5.8 使用对象持久性 78 5.9 小结 79 ...

    Visual C#.NET 2008程序设计案例集锦 (源码)

    案例6.6 动态复制多个文件 案例6.7 动态获取系统当前目录及程序当前目录 案例6.8 文件属性的查看与修改 案例6.9 桌面图标和驱动器的显示与隐藏 案例6.10 禁示修改IE浏览器的主页 本章小结 第7章 硬件处理技术 ...

    NoSQL云数据库mongoDB的C#示例(vs2005)

     *支持复制和故障恢复。  *使用高效的二进制数据存储,包括大型对象(如视频等)。  *自动处理碎片,以支持云计算层次的扩展性  *支持RUBY,PYTHON,JAVA,C++,PHP等多种语言。  *文件存储格式为BSON(一种...

    C#微软培训资料

    第三部分 面向对象的 C#.101 第九章 面向对象的程序设计 .101 9.1 面向对象的基本概念.101 9.2 对象的模型技术 .103 9.3 面向对象的分析 .105 9.4 面向对象的设计 .107 9.5 小 结 .110 第十章 类 .112 ...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表...,共包含562个C#编程中常用的属性、方法、类和各种技术...

    SignalR 2.0 and MVC 5即时通讯完整版示例

    代码示例在JavaScript中引用C#ChatHub类作为chatHub。如果你想ChatHub在传统的Pascal框架中引用jQuery中的类,就像在C#中一样,编辑ChatHub.cs类文件。添加一个using语句来引用Microsoft.AspNet.SignalR.Hubs命名...

Global site tag (gtag.js) - Google Analytics