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