乙個轉殖物件的C 基類

2021-04-17 00:57:55 字數 3069 閱讀 9900

乙個轉殖物件的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.遞迴物件來轉殖,存在的問題 如果有...