Question

je définissais la classe suivante avec des propriétés virtuelles:

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

et d'essayer de cloner des objets de cette classe dérivée. Comment mettre en œuvre une copie en profondeur dans la classe droit de base?

Était-ce utile?

La solution

Si vos types sont sérialisable vous pouvez utiliser 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);
    }
}

Autres conseils

La meilleure façon est généralement sérialiser l'instance et le réhydrater retour comme une nouvelle instance. Une façon de le faire est décrit .

Ma seule mise en garde à l'article qui ne mettent pas en œuvre ce que ICloneable - cette interface est dépréciée et est source de confusion pour les appelants de votre classe. La meilleure chose serait de déplacer cette mise en œuvre dans une méthode utilitaire et l'appeler là-bas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top