public void Clone() { var banana = new CloneableProduct { Name = "Banana", Price = new decimal(2.5) }; var banana2 = banana.Clone(); Assert.IsTrue(banana.EqualsByValue(banana2)); }
private static void Prototype() { // Language agnostic solution var supermarket = new Supermarket(); supermarket.AddProduct("Milk", new Milk(0.89m)); supermarket.AddProduct("Bread", new Bread(1.10m)); decimal sourcePrice; decimal currentPrice; var clonedMilk = (Milk)supermarket.GetProduct("Milk"); clonedMilk.Price = 1; sourcePrice = supermarket.GetProduct("Milk").Price; currentPrice = clonedMilk.Price; Console.WriteLine("{0} | {1}", sourcePrice, currentPrice); var clonedBread = (Bread)supermarket.GetProduct("Bread"); clonedBread.Price = 2; sourcePrice = supermarket.GetProduct("Bread").Price; currentPrice = clonedBread.Price; Console.WriteLine("{0} | {1}", sourcePrice, currentPrice); // C# specific solution using the ICloneable interface var cloneableProduct = new CloneableProduct(100); var clonedProduct = (CloneableProduct)cloneableProduct.Clone(); clonedProduct.Price = 200; sourcePrice = cloneableProduct.Price; currentPrice = clonedProduct.Price; Console.WriteLine("{0} | {1}", sourcePrice, currentPrice); Console.ReadKey(); }