C 物件深度轉殖

2022-01-15 12:18:46 字數 996 閱讀 8901

有基礎的開發者都應該很明白,物件是乙個引用型別,例如:

object b=new object();

object a=b;

那麼a指向的是b的位址,這樣在有些時候就會造成如果修改a的值,那麼b的值也會跟隨著改變(a和b是同乙個引用記憶體位址)。

我們想要a和b都是各自互不影響的,那麼只能是完全地新建乙個新的物件,並且把現有物件的每個屬性的值賦給新的物件的屬性。也就是值型別的複製,這個操作就叫深度轉殖。

這裡我們寫兩個泛型方法分別對物件t和集合list進行深度轉殖的實現,我們的方法實現方式是「擴充套件方法」,就是能在原有的物件後面直接「點」操作。

下面我們來看一下深度轉殖的演算法實現:

using

system;

using

system.collections.generic;

using

system.componentmodel;

using

system.reflection;/**

* author:qixiao

* create:2017-5-25 11:52:21

* */

namespace

qx_frame.helper_dg.extends

else

}return

model;

}public

static ilistdeepclonelist(this ilisttlist) where t : class

else

}listnew.add(model);

}return

listnew;}}

}

上述**已經實現了深度轉殖的操作,在使用上我們如下:

例如有user類,我們可以這樣操作

user user1=new user();

user user2=user1.deepcloneobject();

這樣就完成了對user1的深度轉殖!

深度轉殖物件

有時,我們需要對乙個物件進行複製,如下列要求 1.使用遞迴來實現乙個深度轉殖,可以複製乙個目標物件,返回乙個完整拷貝 2.被複製的物件型別會被限制為數字 字串 布林 日期 陣列 object物件。function isobject obj function cloneobject obj 判斷物件型...

經典物件轉殖模型 深度轉殖

我們都知道 json.parse json.stringfy obj 可以深度轉殖乙個物件,但是有乙個缺陷,不能轉殖 物件 轉殖的方法 param obj returns function clone obj else if obj instanceof object else 轉殖物件 param...

js深度轉殖物件

用js實現物件轉殖最關鍵的兩點就是 var objclone new this.constructor 和objclone key this key clone 乙個實現相同物件建立,乙個實現深度轉殖。object.prototype.clone function else for var key ...