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(); } } }