La clonación de objetos en C #
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?
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