浏览:7042007-11-21 16:17   来自客家网络      :

大家在编程中是如何对自定义的对象进行拷贝的?

如有People类

public class People
{
    string name;

    public string Name
    {
        get
        {
            return this.name;
        }
        set
        {
            this.name = value;
        }
    }
}

People p1 = new People();
p1.Name = "张三";

People p2 = p1;//这种得到的是p1的引用,错误

People p2 = new People();
p2.Name = p1.Name;//正确,如果字段多的话很麻烦

在People类中增加Clone()方法
public People Clone()
{
    return (People)this.MemberwiseClone();
}

则有

People p2 = p1.Clone();//正确

大家是如何实现的?

楼主
  9个月前   暗香浮动      :
设计模式里面有一个专门用来进行copy 和 clone的。
这种情况遇到的比较少。
1楼 回到顶楼 
  9个月前   Losesoul      :
有个很贱的深拷贝的办法,就是将对象序列化之后,再马上饭序列化一个出来~~~
2楼 回到顶楼 
  9个月前   客家网络      :
@Losesoul
:)
3楼 回到顶楼 
  9个月前   航天奇侠      :
这个clone结构我在某本书上看到说要 “避免使用”。

如果是自己的类,那么可以设置类似而不是clone的接口。
如果用到别人而没有此类接口,应该做不了吧。
4楼 回到顶楼 
  9个月前   JesseZhao      :
有个更贱的方法,反射遍历属性copy,嘿嘿
5楼 回到顶楼 
  9个月前   Anders Cui      :
实现ICloneable接口
MemberwiseClone()实现的是浅拷贝
6楼 回到顶楼 
  9个月前   客家网络      :
对于一般的实体类,实现浅拷贝就可以了。
7楼 回到顶楼 
  9个月前   潜水游      :
.net2.0 里面有个泛型的序列化方法,可以大批量复制。
主要原理是,先把对象集合,变成流,然后再复制,再转成集合。
很简单的。这个是深拷贝。
8楼 回到顶楼 
  9个月前   Jeffrey Zhao      :
序列化-反序列化的效果是不错的,只是性能会略差一些。
9楼 回到顶楼 
  9个月前   阿不      :
用NBear.Mapping ,可以实现任意对象的映射和拷贝,
10楼 回到顶楼 

注册用户登录后才能回复,登录注册
> 返回“ASP.NET”


其他话题

相关链接
1 11520