using System;
namespace CloneFunc{
abstract class Prototype{
string id;
public string Id{
get{return this.id;}
set{this.id = value;}
}
public Prototype(string Id){
this.id = Id;
}
public abstract Prototype Clone();
}
class ConcretePrototype1 : Prototype{
public override Prototype Clone(){
return (ConcretePrototype1)this.MemberwiseClone();
}
public ConcretePrototype1(string id) : base(id){
}
}
class EntryPoint{
public static void Main(){
ConcretePrototype1 c1 = new ConcretePrototype1("i");
ConcretePrototype1 cc = c1.Clone() as ConcretePrototype1;
Console.WriteLine(cc.Id + "------" + cc.ToString());
Prototype c2 = new ConcretePrototype1("ii");
Console.WriteLine(c2.Id + "------" + c2.ToString());
bool result = object.ReferenceEquals(cc,c2);
Console.WriteLine(result.ToString());
Console.Read();
}
}
}