누구나 프로토 타입 패턴에서 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