
Singleton Genericpublic class Singleton<T> where T : Singleton<T>, new()
{
private static T instance;
public static T Instance
{
get { return instance; }
set { instance = value; }
}
public static T GetInstance()
{
if (instance == null)
{
instance = new T();
instance.Init();
}
return instance;
}
protected virtual void Init()
{
}
}
Init() : 생성자를 따로 정의할 수 없어, 초기화 함수를 GetInstance에 포함시켜 생성자 역할을 해준다.
instance.Init(); : where T : Singleton<T> 가 있어야한다. => Init()을 사용할 수 있는 조건
instance = new T(); : where T : new() => 인스턴스 생성할 수 있는 조건
where T : Singleton<T>, new() 제네릭부터 써야한다. (서순 중요!)
Prototypeabstract classpublic abstract class Prototype<T>
{
public abstract T Clone();
}
public class Monster : Prototype<Monster>
{
public string name;
public Monster(string name)
{
this.name = name;
}
public override Monster Clone()
{
Monster monster = this;
return monster;
}
}
interfacepublic interface IProtoType<T>
{
public abstract T Clone();
}
public class Monster : IProtoType<Monster>
{
public string name;
public Monster(string name)
{
this.name = name;
}
public Monster Clone()
{
Monster monster = this;
return monster;
}
}
Mainclass Program
{
static void Main(string[] args)
{
Monster monster = new Monster("슬라임");
Monster monster1 = monster.Clone();
Console.WriteLine(monster1.name);
}
}
슬라임