通過屬性進行淺拷貝

2021-08-20 16:18:40 字數 1825 閱讀 1086

一、方法體

是乙個靜態方法copyhelper,包含以下三個部分

1、給propertyinfo型別加個擴充套件的方法,方便進行查詢是否存在相同型別,相同名稱的字段。

///

///propertyinfo擴充套件方法,通過名稱獲得屬性

/// ///

//////

private

static propertyinfo getpropertybyname(this

propertyinfo p,propertyinfo pro)

2、淺拷貝的主體方法,即呼叫上面的方法基礎上,如果不為空,並且允許寫入的話,則用setvalue方法進行賦值

///

///淺拷貝

/// ///

///原始的vo

///vm下的vo

///private

static t o2m(object

vo,t viewmodel)

return

viewmodel;

}private

static t o2m(object vo) where t :new

()

3、向外暴露乙個擴充套件copy方法,執行呼叫

///

///將欄位名稱一致,型別一致的屬性賦值(用於viewmodel和vo相互轉化)

/// ///

//////

///注意此賦值為淺拷貝,model會重新new()

public

static t copyto(this

object vo) where t :new

()

//////

將欄位名稱一致,型別一致的屬性賦值(用於viewmodel和vo相互轉化)

/// ///

//////

///注意此賦值為淺拷貝,model會重新new()

public

static

bool copyto(this

object vo,t model)where t :new

()

二、測試

1、新建兩個實體類,humanvo和studentvo

public

class

humanvo

set }

public

intage

set }

public

bool

***

set }

}

public

class

studentvo

set }

public

intage

set }

public

bool

***

set }

public

string

class

set }

public

string

school

set }

}

2、給humanvo進行賦值

private

void

addinfo()

3、呼叫copyto方法

humanvo.copyto(studentvo);

淺拷貝與深拷貝 GCC 4 9編譯通過

深拷貝和淺拷貝的定義可以簡單理解成 如果乙個類擁有資源 堆,或者是其它系統資源 當這個類的物件發生複製過程的時候,這個過程就可以叫做深拷貝,反之物件存在資源,但複製過程並未複製資源的情況視為淺拷貝。淺拷貝資源後在釋放資源的時候會產生資源歸屬不清的情況導致程式執行出錯。ca const ca c 是自...

物件的淺拷貝,包括拷貝物件原型的屬性

const s symbol s 測試物件 const test arr 0,1,2 date new date 1996 03 03 reg new regexp 我是乙個正則 ig err new error 我是乙個錯誤 s 我的key是symbol noenumerable 我是手動設定的不...

淺拷貝 深拷貝

copy mutablecopy copy 不管是可變的,還是不可變的,結果都是不可變的 mutablecopy 不管是不可變的,還是可變的,結果都是可變的 nsmutablestring str nsmutablestring stringwithformat a nsarray arr1 str...