1. 程式人生 > 其它 >c#設計模式之原型模式

c#設計模式之原型模式

原文網址:https://blog.csdn.net/FireworksFlower/article/details/121728335

官方:
使用原型例項指定待建立物件的型別,並且通過複製這個原型來建立 新 的物件
我的話:
原型模式:就是使用原來的物件,不通過new的方式來建立新的物件,而是通過複製的方式來建立新的物件。

其中原型模式中會用的到兩種複製:淺拷貝和深拷貝
官方:

淺拷貝:是指當物件的欄位值被拷貝時,欄位引用的物件不會別拷貝。例如:如果一個物件有一個指向字串的欄位,並且我們對該物件做了一次淺拷貝,那麼這兩個物件將引用同一個字串

深拷貝:是對物件例項中欄位的引用的也進行拷貝,如果一個物件由一個指向字串的欄位,並且我們對該物件進行了深拷貝的話,那麼我們將建立一個物件和一個新的字串,新的物件引用新的字串。也就是說,執行深拷貝建立的新物件和原來的物件不會共享任何東西,改變一個物件不會對另外一個物件造成任何影響,而執行淺拷貝建立的新物件與來物件共享成員,改變一個物件,另外一個物件的成員也會跟著改變。

使用原型模式會用到C#中一個介面類ICloneable

我的理解是:
淺拷貝:拷貝出來的新物件的引用和原物件的引用,都指向目前的的物件(看示例)
深拷貝:拷貝出來的物件的引用指向新的物件,原來的物件引用還是指向原來的物件(看示例)

淺拷貝
public class PersonInfo
{
public string sex;
public string dizhi;

}
public class PersonInfo_1:ICloneable
{
public string sex;
public string dizhi;

public object Clone()
{
return this.MemberwiseClone();
}
}
/// <summary>
/// 淺拷貝
/// </summary>
public class TestCone : ICloneable
{
private string name;
private int age;
private PersonInfo personInfo;
public TestCone(string Name,int a)
{
name = Name;
age = a;
personInfo = new PersonInfo();
}

public void SetiNFO(string x, string d)
{
personInfo.sex = x;
personInfo.dizhi = d;
}

public void Print()
{
Console.WriteLine(this.name + ":" +this. age+personInfo.sex+","+personInfo.dizhi);
}
public object Clone()
{
return (Object )this.MemberwiseClone();
}

}

版權宣告:本文為CSDN博主「FireworksFlower」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/FireworksFlower/article/details/121728335