任何人都可以解釋爲什麼我們需要在原型模式中使用MemberwiseClone()?c原型設計模式#
public abstract class AProtagonistEx
{
int m_health;
int m_felony;
double m_money;
// This is a reference type now
AdditionalDetails m_details = new AdditionalDetails();
public int Health
{
get { return m_health; }
set { m_health = value; }
}
public int Felony
{
get { return m_felony; }
set { m_felony = value; }
}
public double Money
{
get { return m_money; }
set { m_money = value; }
}
public AdditionalDetails Details
{
get { return m_details; }
set { m_details = value; }
}
public abstract AProtagonistEx Clone();
}
class CJEx : AProtagonistEx
{
public override AProtagonistEx Clone()
{
**return this.MemberwiseClone() as AProtagonistEx;**
}
}
默認情況下,父類的所有屬性和方法都可以在子類中訪問。那麼這種模式的需求是什麼?
因爲您需要創建原型的*副本*,而不是參考。否則,您只需對同一對象進行多次引用,並且所有更改都可以看到。 – Luaan
複製和參考有什麼區別? –
引用,顧名思義只是對內存位置的引用(如C/C++中的指針,這個概念不限於.NET或C#)。然而,一個副本,顧名思義,整個內存區域(由引用指向)的副本複製到另一個內存位置。由引用指向的內存位置的內容可以根據當然是災難性結果的時間而改變。看看這個http://www.albahari.com/valuevsreftypes.aspx以及更多的理論閱讀https://en.wikipedia.org/wiki/Reference_%28computer_science%29 – Deniz