4

我用虚拟属性定义了下一个类:

public class Order: BaseEPharmObject
{
    public Order()
    {
    }

    public virtual Guid Id { get; set; }
    public virtual DateTime Created { get; set; }
    public virtual DateTime? Closed { get; set; }
    public virtual OrderResult OrderResult { get; set; }
    public virtual decimal Balance { get; set; }
    public virtual Customer Customer { get; set; }
    public virtual Shift Shift { get; set; }
    public virtual Order LinkedOrder { get; set; }
    public virtual User CreatedBy { get; set; }
    public virtual decimal TotalPayable { get; set; }

    public virtual IList<Transaction> Transactions { get; set; }
    public virtual IList<Payment> Payments { get; set; }
}

并试图克隆该派生类的对象。如何在基类中实现深拷贝?

4

2 回答 2

7

如果您的类型是可序列化的,您可以使用BinaryFormatter

public static T DeepClone<T>(T obj)
{
    using (var stream = new MemoryStream())
    {
        var formatter = new BinaryFormatter();
        formatter.Serialize(stream, obj);
        stream.Position = 0;
        return (T)formatter.Deserialize(stream);
    }
}
于 2010-04-06T14:41:11.177 回答
0

最好的方法通常是序列化实例并将其重新水化为新实例。此处描述了一种执行此操作的方法。

我对这篇文章的唯一警告是不要将其实现为ICloneable- 此接口已被弃用,并且会让您的类的调用者感到困惑。最好的办法是将这个实现移动到一个实用方法中并在那里调用它。

于 2010-04-06T14:40:19.237 回答