
Kodlar ise şu şekilde...
abstract class PrototypeBase:ICloneable
{
abstract public object Clone();
}
class Prototype1:PrototypeBase
{
public int deger1;
public override object Clone()
{
return this.MemberwiseClone();
}
public override string ToString()
{
return "Deger1 =" + deger1;
}
}
class Prototype2:PrototypeBase
{
public double deger2;
public override object Clone()
{
return this.MemberwiseClone();
}
public override string ToString()
{
return "Deger2=" + deger2;
}
}
class Collection
{
List<PrototypeBase> list = new List<PrototypeBase>();
public void AddList(params PrototypeBase[] type)
{
foreach(PrototypeBase prototype in type)
list.Add(prototype);
}
public PrototypeBase Copy(int index)
{
return list[index].Clone() as PrototypeBase;
}
public PrototypeBase this[int index]
{
get { return list[index]; }
}
}
static void Main(string[] args)
{
Collection collection = new Collection();
Prototype1 p1 = new Prototype1() { deger1 = 1 };
Prototype2 p2 = new Prototype2() { deger2 = 12.3 };
Prototype1 p3 = new Prototype1() { deger1 = 3 };
Prototype2 p4 = new Prototype2() { deger2 = 16.9 };
collection.AddList(p1, p2, p3, p4);
PrototypeBase base1 = collection.Copy(1);
Console.WriteLine(base1.ToString());
PrototypeBase base2 = collection[0].Clone() as PrototypeBase;
Console.WriteLine(base2.ToString());
Prototype1 prototype = base2 as Prototype1;
prototype.deger1 = 10;
Console.WriteLine(prototype.ToString());
Console.WriteLine(collection[0].ToString());
Console.ReadLine();
}
PrototypeBase sınıfından Prototype1 ve Prototype2 sınıflarını türetiyoruz.Bu sınıfların içerisinde de Clone metodunu implement ediyoruz.Collection sınıfı bütünlük oluşturmak için tanımlanmış ve birtakım özel metodlar eklenmiştir.Kullanımları bu şekilde olacak diye bir kısıt yoktur. Main metotta ise nesnelerimizi yaratıyoruz.Daha sonra collectiondaki tipleri prototip olarak kabul ederek onları kullanarak yeni nesneler türetiyoruz.Yukarıdaki prototype değişkenin değeri 10 ile değiştirelerek collectiondaki aynı nesne olmadığı gösterilmiştir.Ekran görüntüsü ise şu şekilde olacaktır...

