程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C# Tips-淺拷貝和深拷貝(shallow copy VS deep copy )(5)

C# Tips-淺拷貝和深拷貝(shallow copy VS deep copy )(5)

編輯:關於C語言

注意:通過序列化和反序列化實現深拷貝,其和其字段類型必須標記為可序列化類型,既添加特性(Attribute)[Serializable]。

通過反射實現

通過序列化/反序列化方式我們能比較流暢的實現深拷貝,但是涉及到IO操作,托管的的環境中,IO操作比較消耗資源。 能不能有更優雅的解決方案。CreateInstance,對,利用反射特性。這個方法大家可以參考這篇博客:http://rubenhak.com/?p=70 文章反射類的Attribute,利用Activator.CreateInstance New一個類出來(有點像DataSet.Clone先獲得架構),然後利用PropertyInfo的SetValue和GetValue方法,遍歷的方式進行值填充。

代碼實現如下:

public class Person
{
    private List<Person> _frIEnds = new List<Person>();

    public string Firstname { get; set; }
    public string Lastname { get; set; }

    [Cloneable(CloneableState.Exclude)]
    [Cloneable(CloneableState.Include, "FrIEnds")]
    public List<Person> Friends { get { return _frIEnds; } }

    [Cloneable(CloneableState.Exclude)]
    public PersonManager Manager { get; set; }
}

C#為什麼要設計深拷貝和淺拷貝?

這個我也一直也找不到一個合適的答案,希望有人來討論下!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved