C语言clone函数 c#clone

C# Clone函数重写

1、定义类时声明:class person:ICloneable

成都创新互联公司网站建设公司一直秉承“诚信做人,踏实做事”的原则,不欺瞒客户,是我们最起码的底线! 以服务为基础,以质量求生存,以技术求发展,成交一个客户多一个朋友!专注中小微企业官网定制,网站设计制作、成都做网站,塑造企业网络形象打造互联网企业效应。

2、克隆包括浅复制和深复制,甚至可以不复制(但没有意义了),你的person类中要实现以下方法:

public object Clone()

{

//return this as object;//不复制,引用同一个对象

return this.MemberwiseClone(); //浅复制

//return new person() as object;//深复制

}

不复制时是引用同一个对象,二者的变化一致是关联的!

浅复制和深复制都是对对象的复制,区别在于:深复制会复制整个填充的对象,包括该对象中其他引用类型和值类型的值;而浅复制只复制了一个对象中所有引用,它没有值的复制,通过引用它们的其他对象的引用来共享它们。

针对你的类用浅复制就可以了。

算法与数据结构 c语言问题

LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。

LinkedList 实现 List 接口,能对它进行队列操作。

LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。

LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。

LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。

LinkedList 是非同步的。

实现list的深拷贝

这时,获取source.get(0)的name值,也变成了“CDE”。

为了解决这个问题,使得改变copy中的值,不影响source中的数据,则要进行深拷贝。

即,对A类实现clone()方法:

然后,

就可以进行深拷贝了。

在此,再多描述一下关于Clone的内容。

Java对对象和基本数据类型的处理是不一样的。在Java中用对象作为入口参数的传递则缺省为“引用传递”,也就是说仅仅传递了对象的一个“引用”,这个引用的概念与C语言中的指针引用是一样的。当函数体内部对这个变量进行改变时,实质上就是对这个对象进行直接操作。

除此之外,在任何用“=”向对象变量赋值的时候都是“引用传递”。

一、当Class A的成员变量类型是基本数据类型(外加String类型)时,只要实现如上简单的clone(称影子clone)就可以。但是如果Class A的成员变量是数组或者更复杂类型时,就必须实现深度clone。

此处的A的成员变量String[],影子clone对name数组clone他们的地址,需进行深拷贝。

二、需要注意的是,Class A存在更为复杂的成员变量时,如Vector等存储对象地址的容器时,就必须clone彻底。


网站标题:C语言clone函数 c#clone
新闻来源:http://ybzwz.com/article/dodjesi.html