我使用虚拟属性定义了下一个类:
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; }
}
并尝试克隆该派生类的对象。如何在基类中实现深层复制?
答案 0 :(得分:7)
如果您的类型为serializable,则可以使用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);
}
}
答案 1 :(得分:0)
最好的方法通常是序列化实例并将其作为新实例重新水化。有一种方法是here。
我对该文章的唯一警告是,不要将其实现为ICloneable
- 这个界面已被弃用,并且会让您的类的调用者感到困惑。最好的办法是将此实现移动到实用程序方法中并在那里调用它。