4

仮想プロパティを使用して次のクラスを定義しました。

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

その派生クラスのオブジェクトを複製しようとしています。基本クラスにディープ コピー権を実装する方法は?

4

2 に答える 2

7

型がシリアライズ可能な場合、 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);
    }
}
于 2010-04-06T14:41:11.177 に答える
0

通常、最善の方法は、インスタンスをシリアル化し、新しいインスタンスとして復元することです。これを行う 1 つの方法をここで説明します。

この記事に対する私の唯一の注意点は、これを as として実装しないことですICloneable。このインターフェイスは非推奨であり、クラスの呼び出し元を混乱させます。最善の方法は、この実装をユーティリティ メソッドに移動して、そこで呼び出すことです。

于 2010-04-06T14:40:19.237 に答える