誰でも、なぜPrototypeパターンで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を見てください。また、MemberwiseClone()のトップレベルであっても、より多くの理論的な読書については、https://en.wikipedia.org/wiki/Reference_%28computer_science%29 – Deniz