原型模式之深複製和淺複製

2021-07-09 01:50:52 字數 1094 閱讀 2412

看了原型模式,覺著和c#中講的值型別和引用型別很相似,不妨先來複習一下值型別和引用型別吧

值型別:

public struct person

set}

--------------//宣告年齡

---------------//宣告性別

} static void main()

結果 p1: 20 男

p2: 30 女

引用型別:

public class person

set}

--------------//宣告年齡

---------------//宣告性別

}主函式相同

結果 p1: 30女

p2:30女

值型別的值存在棧上,引用型別棧上存的是位址,值在堆上。列舉、結構、int 、decimal等型別是值型別的是傳遞拷貝。物件(引用型別)則是傳遞引用。類 、string、陣列是引用型別。

言歸正傳,深複製和淺複製是同樣的道理

淺複製:被複製物件的所有變數都含有與原來的物件相同的值,而所有的對其他物件的引用都仍然指向原來的物件。

深複製:把引用物件的變數指向複製過的新物件而不是原有的被引用的物件。

原型模式:用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。

memberwiseclonce()方法:如果欄位是值型別的,則對該字段執行逐位複製,如果欄位是引用型別,則複製引用但不複製引用的物件;因此,原始物件及其副本引用同乙個物件。

淺複製uml**:

設計模式學習 原型模式 深複製與淺複製

原型模式,用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。原型模式就是從乙個物件再建立另外乙個可定製的物件,而且不需要知道任何建立的細節。其實,原型模式就是在原有的類中增加乙個轉殖函式,轉殖乙個和自身一樣的物件。這其中就涉及到了深複製和淺複製,淺複製 被複製的物件的所有變數都含有與原...

淺複製和深複製

在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 全域性函式,傳入的是物件 void g fun resume c 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 全域性函式 返回的是物件 resume g fun 3 乙個...

深複製和淺複製

以下 是否完全正確,執行可能得到的結果是 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class a class b b void sayhello b b int main 程式正常執行 程式編譯錯誤 程式崩潰 程式死迴圈 這個程式會直接崩潰 voidsayhello ...