static void _Main(string[] args) { Stormtrooper s1 = new Stormtrooper("white"); Stormtrooper s2 = (Stormtrooper)s1.Clone(); Console.WriteLine(s2.Color); s1.Color = "black"; Console.WriteLine(s2.Color); s2.CurrentCommander.Name = "Han Solo"; Console.WriteLine("Second stormtrooper's commander: " + s2.CurrentCommander.Name); Console.WriteLine("First stormtrooper's commander: " + s1.CurrentCommander.Name); Console.ReadLine(); }
public IPrototype Clone() { Stormtrooper stormtrooper = (Stormtrooper)MemberwiseClone(); // тут захотіли щоб командира можна було міняти окремо для кожного штурмовика // і тому робимо клас командира так, щоб він реалізовував прототип // а рідна планета залишатиметься одна для всіх // в даному випадку private set не дає нам зробити реткон =) і тупо поміняти історію створення штурмовиків // але можна було би придумати якийсь містичний зв'язок з усіма штурмовиками // і тоді він би мінявся у всіх разом, бо MemeberwiseClone залишає типи-посилання спільними для клонів Commander copiedCommander = (Commander)stormtrooper.CurrentCommander.Clone(); stormtrooper.CurrentCommander = copiedCommander; return(stormtrooper); }