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

关于深浅克隆

阅读更多

 

Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace test
{
    
public delegate void aa(heihei a);
    
class Class15
    {
        
static void Main(string[] args)
        {
            heihei a 
= new heihei()
                           {
                               id 
= "1"
                         };
            aa aa
=new aa(test2);
            IAsyncResult ar
=aa.BeginInvoke(a, nullnull);
            Thread.Sleep(
3000);
            a.id 
= "2";
            test3(a);
            aa.EndInvoke(ar);
            Console.ReadLine();


        }

 

        
private static void test2(heihei a)
        {
            Console.WriteLine(
"test2");
            Console.WriteLine(a.id);
            Thread.Sleep(
10000);
            Console.WriteLine(a.id);

        }

        
private static void test3(heihei a)
        {
            Console.WriteLine(
"test3");
            Console.WriteLine(a.id);
        }
    }
    
public class heihei
    {
        
public string id { getset; }
    }
}

我一直都是用深克隆,因为虽然简单类可能只有值类型,但是指不定什么时候就有个引用类型。深克隆目前来说比较实在的方法是序列化加反序列化,当然你也可以自己使用反射,或者一个对一个的赋值。我一般都是自己做一个方法比如叫DeepCopy().

我一直知道.net好像提供了什么Clone()还有什么MemberwiseClone(),提供了一些克隆相关的东东,但是没有弄清楚,今天有时间就看了一下,原来.net提供了一个ICloneable接口,该接口下有一个Clone()方法,你可以实现它用来实现你自己的克隆方式,比如深克隆或是浅克隆,MemberwiseClone()是object类中的一个方法,用来实现类的浅克隆,这个是.net提供的现成方法,不过大多数时候它应该没有什么用处,我们需要自己实现自己的深克隆.

.net提供了一个ICloneable接口只是为我们方法名约定,用这个来Clone方法来表示类的克隆机制,它并没有提供什么有建设性的东东。我们使用名为 DeepCopy一样可以,只是如果大家都用它,可能就会成为一种约定熟成。OK,以后我就用Clone作为我的类的深克隆的名称。

 

这里给一个使用MemberwiseClone()实现浅克隆结合异步编程的例子,

 

Code
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace test.test
{
    
public delegate void aa(heihei a);
    
class Class16
    {
        
static void Main(string[] args)
        {
            heihei a 
= new heihei()
            {
                id 
= "1"
            };
            aa aa 
= new aa(test2);
            IAsyncResult ar 
= aa.BeginInvoke(a, nullnull);
            heihei c 
= a.Clone() as heihei;
            c.id 
= "2";
            test3(c);
            aa.EndInvoke(ar);
            Console.ReadLine();


        }



        
private static void test2(heihei a)
        {
            Console.WriteLine(
"test2");
            Console.WriteLine(a.id);
            Thread.Sleep(
10000);
            Console.WriteLine(a.id);

        }

        
private static void test3(heihei a)
        {
            Console.WriteLine(
"test3");
            Console.WriteLine(a.id);
        }
    }
    
public class heihei:ICloneable
    {
        
public string id { getset; }
        
public object Clone()
        {
            
return MemberwiseClone();
        }
    }
}

 

再给一个相关的例子,用来测试,如果不用浅克隆,对对象的修改会影响到所有操作该对象的地方即使你使用了Cls c2=c1

c2,c1均指向同一个引用,

 

 

 

分享到:
评论

相关推荐

    Java深浅clone

    总结来说,Java的深浅克隆是对象复制的重要手段。浅克隆适用于字段不包含可变对象或者对象的深层结构不需要独立的情况,而深克隆则在需要完整复制对象及其嵌套对象时更为适用。理解并正确使用这两种克隆方式对于编写...

    C#深浅拷贝的深入解析

    这里涉及到了克隆自身对象。那么也就是对对象进行拷贝。这里就涉及到了这么一个概念。深浅拷贝、何为深拷贝何为浅拷贝呢?我们一起来看看吧。 浅拷贝 首先我们看看浅拷贝。浅拷贝就是将对象中的所有字段复制到新...

    js进阶知识44张脑图.zip

    4. **深浅克隆与比较**: - 浅克隆只复制对象的第一层属性,而深克隆会递归复制整个对象及其嵌套的对象或数组。深浅比较则用于检查两个对象是否具有相同的结构和值,这在比较复杂数据结构时非常有用。 5. **ES6...

    js实现数组和对象的深浅拷贝

    当我们讨论深浅拷贝时,主要关注的是对象类型的数据,因为原始数据类型赋值时,存储的是值的直接拷贝,而对象类型赋值时,存储的是指向原始数据的引用地址。 浅拷贝(Shallow Copy)是指创建一个新对象,这个对象...

    更新至2020年12月最全Java 面试全解析:核心知识点与典型面试题.pdf

    关于类和克隆,主要讨论了克隆的深浅本质。数据结构和队列部分,则不仅深入讲解了集合的使用和关系,还包括队列内容的掌握。 在反射和动态代理部分,重点讲解了反射与动态代理的关系,提供了实际应用场景以及实现...

    Color-Picker-Library:颜色选择器的小型库

    扩展弹出窗口你可以设置cordinats 你可以得到颜色深浅用法克隆存储库并将源添加到您的项目中将此行添加到您的 gradle 构建文件的依赖项中 compile project(':color_pickers_library') ColorPicker picker = new ...

    PS制作阿凡达借鉴.pdf

    2. **基础色彩调整**:使用硬边画笔工具,设置模式为“颜色”,不透明度为50%,选择蓝色对皮肤进行涂抹,多次使用不同深浅的蓝色增加层次感。同时,使用紫色对嘴唇进行点缀,使色彩过渡更自然。 3. **去除胡须**:...

    Insta-Clone:使用React和Tailwind CSS的Instagram克隆的实践项目

    1. **Utility classes**:例如,`.bg-blue-500`表示背景颜色为蓝色系的第500级深浅,`.px-4`表示左右填充4个单位。开发者可以根据需要直接添加或叠加类名,实现快速布局。 2. **Responsive design**:Tailwind提供...

    河南省光山二高2016届高三生物复习专题二细胞工程单元强化训练题含解析新人教版选修3

    酶解过程中,悬浮液绿色的深浅可以作为观察酶解效果的指标之一,颜色变化可能表示细胞壁降解程度。原生质体需经过离心、洗涤,以清除酶和其他杂质,然后可用于细胞融合等后续实验。 5. 动物细胞培养:细胞培养液...

    PS制作阿凡达.pdf

    通过多次涂抹不同深浅的蓝色,创造渐变效果。对于特定部位,如嘴唇,可以使用紫色,降低不透明度,以增加自然感。 3. **去除特征**:利用“克隆图章工具”删除胡须,确保目标区域与源区域相似,以保持皮肤的平滑。 ...

    SAI 绘画工具 .zip

    此外,SAI还提供了压力感应功能,支持绘图板,这意味着你可以通过控制笔压来改变线条的粗细和颜色的深浅,创造出类似传统绘画的自然效果。 SAI的图层管理功能也是其一大亮点。用户可以轻松创建、合并、隐藏和锁定...

    实验二十二动物寄生虫病的Dot-ELISA法诊断技术.doc

    4. 将NC膜浸入单克隆酶标抗体溶液中 5. 将NC膜浸入底物溶液中振摇显色 6. 用流水冲洗数分钟,放入蒸馏水中终止反应 (二)间接法测抗体(以检测旋毛虫病抗体为例) 1. 将特异性抗原点在NC膜上 2. 将待检血清加入,...

    2021届北京市朝阳区高三上学期生物期中考试题答案.docx

    2. 基因工程操作流程:题目中提到了DGAT1基因的克隆与表达,涉及逆转录PCR(RT-PCR)用于获取目的基因,感受态细胞的制备用于基因导入,以及抗生素标记(氨苄青霉素和X-gal)用于筛选阳性克隆。此外,通过PCR验证、...

    ps工具的快捷键及用途.pdf

    除了以上介绍的工具,Photoshop还有许多其他工具,如克隆图章、橡皮擦、历史画笔、渐变工具、模糊工具等,每个都有其特定的快捷键和用途,熟练掌握这些快捷键能大幅提升编辑效率。在实际使用中,结合工具选项栏的...

    swift-FlatUIColors-采用Swift编写的扁平UI调色板助手

    以下是关于Swift中颜色操作和"FlatUIColors"库的一些关键知识点: 1. **颜色表示**:在Swift中,颜色可以通过`UIColor`类来表示。`UIColor`提供了许多工厂方法,如`init(red:green:blue:alpha:)`,`init(hexString:...

    ELISA检测技术PPT学习教案.pptx

    随着生物技术的进步,例如基因工程抗原和单克隆抗体的应用,以及高度自动化的ELISA检测仪的引入,这项技术的特异性和实用性进一步增强,成为科研、疾病诊断、食品安全、环境监测等多个领域的首选方法。 ELISA试剂盒...

    ELISA的原理及基本类型[收集].pdf

    通过洗涤去除未结合的分子,然后添加酶底物,酶的催化反应会产生颜色变化,颜色的深浅直接反映了样品中目标物质的浓度,从而实现定性或定量的分析。 ELISA有多种基本类型,每种类型都有其特定的应用场景和优势: 1...

    jQuery中json对象的复制方式介绍(数组及对象)

    在JavaScript和jQuery中...`jQuery.extend`可以进行对象的深浅复制,解决引用问题;`$.grep`用于过滤数组元素;而`sort`方法则可以方便地对数组进行排序。在实际开发中,理解这些方法的用法对于优化数据操作至关重要。

    2022预防疾控微生物检验技术-呼吸道感染细菌(精选试题).doc

    7. 白喉棒状杆菌的异染颗粒是该菌的一个特征性结构,可以通过阿尔伯特染色来观察,这种染色法可以使异染颗粒呈现深浅不一的颜色,有助于鉴别白喉杆菌。 8. 确定白喉棒状杆菌是否产毒素的金标准是Elek平板毒力试验,...

Global site tag (gtag.js) - Google Analytics