看了原型模式,覺著和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 ...