示例#1
0
        public void CompositeCompare()
        {
            var bike = new Bicycle
            {
                Name       = "Lightning",
                FrontWheel = new Wheel {
                    Brand = "Dunlop"
                },
                RearWheel = new Wheel {
                    Brand = "Michelin"
                }
            };

            var clone = bike.Clone(deep: true); // deep clone!

            Assert.AreNotSame(bike, clone);
            Assert.AreNotSame(bike.FrontWheel, clone.FrontWheel);
            Assert.AreNotSame(bike.RearWheel, clone.RearWheel);

            // compare the whole bike with the clone including wheels
            Assert.IsTrue(bike.EqualsByValue(clone));

            clone.FrontWheel.Brand = "Noname";
            Assert.IsFalse(bike.EqualsByValue(clone));
        }
示例#2
0
        public TaskPage15()
        {
            Car car = new Car("Обычный автомобиль", 120, 4, "Бензин", 90);
            CarWithElectronic carWithElectronic = new CarWithElectronic("Авто напичканное электроникой", 150, 2, "Дизель", 70);
            Bicycle           bicycle           = new Bicycle("Велосипед", 40, 2);

            transports = new List <Transport>()
            {
                car, carWithElectronic, bicycle
            };

            ConsoleTool.WriteLineConsoleGreenMessage("Опробуем поверхностное клонирование объекта с использованием небезизвестного интерфейса.");
            var clonedBicycle = (Bicycle)bicycle.Clone();

            transports.Add(clonedBicycle);
            ConsoleTool.WriteLineConsoleGreenMessage("Выведем текущую инфомрацию по оригинальному и клонированному объектам. Она должна быть одинаковой: ");
            Console.WriteLine(bicycle.ToString());
            Console.WriteLine(clonedBicycle.ToString());

            ConsoleTool.WriteLineConsoleGreenMessage("А теперь изменим все три свойства для оригинального объекта. Эти изменения не должны затронуть клонированный. Затем повторим вывод: ");
            bicycle.Name              = "Переименованный велосипед";
            bicycle.MaxSpeed          = 10;
            bicycle.PassengerCapacity = 1;
            Console.WriteLine(bicycle.ToString());
            Console.WriteLine(clonedBicycle.ToString());

            ConsoleTool.WriteLineConsoleGreenMessage("Рассмотрим пример использования глубокого клонирования. Он используется, когда класс имеет в своей структер поле с сылочным типом данных. Добавим нового водителя к нашему велосипеду.");
            bicycle.TransportDriver = new Driver("Алексей");

            ConsoleTool.WriteLineConsoleGreenMessage("Клонируем наш велосипед еще раз.");
            var moreClonedBicycle = (Bicycle)bicycle.Clone();

            transports.Add(moreClonedBicycle);
            Console.WriteLine(moreClonedBicycle.ToString());

            ConsoleTool.WriteLineConsoleGreenMessage("Теперь переименуем водителя первого велосипеда и выведем все три имеющиеся у нас велосипеды новым способом: ");
            bicycle.TransportDriver.Name = "Александр";
            foreach (Transport transport in transports)
            {
                if (transport is Bicycle)
                {
                    Console.WriteLine(transport.ToString());
                }
            }
        }
示例#3
0
        private static void Main(string[] args)
        {
            //var someVehicle = new Car(2, "Coupe");
            var someVehicle = new Bicycle("Speddy Road Runner");
            var vehicleCopy = someVehicle.Clone();

            someVehicle.WhoAmI();
            vehicleCopy.WhoAmI();
        }