Pregunta

I definida siguiente clase con propiedades virtuales:

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; }
}

y tratar de clon de objetos de esa clase derivada. Cómo implementar un derecho copia en profundidad en la clase base?

¿Fue útil?

Solución

Si sus tipos son serializable podría utilizar 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);
    }
}

Otros consejos

La mejor manera es por lo general para serializar la instancia y rehidratar de nuevo como una nueva instancia. Una forma de hacer esto se describe aquí .

Mi única salvedad a este artículo es que no implementan esto como ICloneable - esta interfaz es obsoleto y está confundiendo a las personas que llaman de su clase. Lo mejor sería mover esta aplicación en un método de utilidad y lo llaman allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top