I defined next class with virtual properties:
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; }
}
and trying to clone objects of that derived class. How to implement a deep copy right in the base class?
If your types are serializable you could use 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);
}
}
The best way is generally to serialize the instance and rehydrate it back as a new instance. One way of doing this is described here.
My only caveat to the article is that don't implement this as ICloneable
- this interface is deprecated and is confusing to callers of your class. The best thing would be to move this implementation into a utility method and call it there.
来源:https://stackoverflow.com/questions/2585652/cloning-objects-in-c-sharp