術 c 中利用反射實現深拷貝

2021-07-07 11:07:43 字數 810 閱讀 2155

c#中深拷貝不常用,但是需要的時候如果沒有,實在是麻煩的很。今天聊天,中梁大神說他實現了乙個,趕緊學習學習。廢話少說,直接上**。

using system;

using system.collections;

using system.collections.generic;

using system.reflection;

public

class clonehelper

public

static

void copy(t dst, t src)

static

void copy(object dst, object src, type type)

else

}return;

}else

if (type.getinte***ce("idictionary") != null)

else

}else

else}}

return;}}

fieldinfo fields = type.getfields();

foreach (fieldinfo field in fields)

if (field.fieldtype.isprimitive || field.fieldtype.isvaluetype || field.fieldtype == typeof(string))

else}}

}}

總體思路就是利用反射拿到字段(field),然後拷貝字段。

反射實現深拷貝

源 引用自 做了一些修改,反射的時候直接取字段值,不取屬性值,因為屬性最終是暴漏的字段值。修改後的 支援泛型。源 泛型報錯。public static t deepcopywithreflection t obj copied.setvalue deepcopywithreflection arra...

C 中實現物件的深拷貝

1 2 物件的深度拷貝 序列化的方式 3 4 public static class mydeepcopy 5 24 25 26 27 二進位制序列化的方式進行深拷貝 28 確保需要拷貝的類裡的所有成員已經標記為 serializable 如果沒有加該特性特報錯 29 30 31 32 33 pub...

c 中深拷貝與淺拷貝

如果沒有自定義複製建構函式,則系統會建立預設的複製建構函式,但系統建立的預設複製建構函式只會執行 淺拷貝 即將被拷貝物件的資料成員的值一一賦值給新建立的物件,若該類的資料成員中有指標成員,則會使得新的物件的指標所指向的位址與被拷貝物件的指標所指向的位址相同,delete該指標時則會導致兩次重複del...