乙個轉殖物件的c#基類
byamir harel
投遞於2002, 12, 30
摘要:乙個實現icloneable
介面的類。
應用於:c#, .net
download source files - 1.27 kb
雖然在現實世界中的轉殖課題是有爭議的, 在.net世界使用它卻足夠安全, 難道不是嗎?
為實現乙個類你究竟有多少次要實現icloneable介面, 而且每一次都寫相同的**,或為每個類寫特定的**。而且,當你的類加入乙個新的字段時,往往會忘記更新這個新字段的轉殖方法。如果我沒說錯的話,這種時候往往會帶來惱人的bugs。
這是我的類得以存在的原因。 藉由反射機制的小小幫助,我建立了乙個用預設行為實現了icloneable介面的抽象類。現在或許你正在問自己: 什麼是預設行為? 那麼我很高興你這樣詢問。 轉殖的預設行為,是採用以下的規則來轉殖類中的每乙個字段:
檢視一下類中的每乙個字段是否支援icloneable
介面
如果某字段不支援icloneable
介面
,
那麼該字段將以常規方式處理。這意味著,如果該字段是乙個值型別,那麼該值被拷貝;如果該字段是乙個引用型別,轉殖的字段將指向同乙個物件。
如果該欄位支援icloneable
介面
,
我們將使用其本身的
clone
方法對其進行轉殖。
如果該欄位支援ienumerable
介面
,
我們需要檢查他是否支援
ilist 或idictionary 介面。
如果支援,那麼我們迭代該集件,並且檢視集合的每一項是否支援icloneable
介面。
讓你的類支援
icloneable
介面所要做的就是
,
將你的類繼承自如下所述的
baseobject
類
:
publicclas**yclass : baseobject
publicclas**ycontainer : baseobject
}}
現在在main方法中加入如下**:
staticvoidmain(string args)
當監測
con2
例項時,你將會看到
myclass
例項的第一項已經變為5,而
con1
例項卻沒有改變。這樣你將明白加入到類中的任意
支援icloneable
介面的欄位將被同樣地轉殖。而且,如果該欄位支援
ilist 或idictionary 介面,轉殖方法將偵測該欄位,輪詢所有項,並同樣地試圖對他們進行轉殖。
///
///baseobject類是乙個用來繼承的抽象類。
/// 每乙個由此類繼承而來的類將自動支援轉殖方法。
/// 該類實現了icloneable介面,並且每個從該物件繼承而來的物件都將同樣地
/// 支援icloneable介面。
///
publicabstractclassbaseobject : icloneable
else
//現在我們檢查該物件是否支援ienumerable介面,如果支援,
//我們還需要列舉其所有項並檢查他們是否支援ilist 或idictionary 介面。
type ienumerabletype = fi.fieldtype.getinte***ce
( "ienumerable", true);
if( ienumerabletype != null)
{
//取得該字段的ienumerable介面
ienumerable ienum = (ienumerable)fi.getvalue(this);
//這個版本支援ilist 或idictionary 介面來迭代集合。
type ilisttype = fields[i].fieldtype.getinte***ce
( "ilist", true);
type idictype = fields[i].fieldtype.getinte***ce
( "idictionary", true);
intj = 0;
if( ilisttype != null)
{
如何轉殖乙個json物件
定義乙個json物件 jobject job new jobject job age 13 job male context.response.write job job.tostring 輸出結果為 job jobject j clone new jobject j clone jobject j...
js轉殖乙個物件,支援迴圈引用的轉殖
function clonehelper function cache,item cache.push item,item utils.clone item,cache return item window.utils clone function obj,cache 支援節點轉殖,物件轉殖,同時也...
js中複製乙個物件方法(轉殖物件)
js中複製乙個物件方法 轉殖物件 平時我們針對物件,還有其他基本型別常常使用複製,對於 這種物件,複製之後的只是多了乙個引用,實際上還是指向原物件。1.使用將轉化為json字串,然後再轉回去。存在的問題 似乎對於複雜的會出問題,比如物件裡面存在物件,就會出問題。2.遞迴物件來轉殖,存在的問題 如果有...