public TaskPage7() { Car car = new Car("Обычный автомобиль", 120, 4, "Бензин", 90); CarWithElectronic carWithElectronic = new CarWithElectronic("Авто напичканное электроникой", 150, 2, "Дизель", 70); Bicycle bicycle = new Bicycle("Велосипед", 40, 2); ConsoleTool.WriteLineConsoleGreenMessage("Ниже представлены экземпляры объектов разных типов, но все они объединены одним базовым типом Transport через наследование."); ConsoleTool.WriteLineConsoleGreenMessage("Car и Bicycle унаследованы от Transport. CarWithElectronic унаследован от Car."); ConsoleTool.WriteLineConsoleGreenMessage("Вывожу о них данные я через foreach. И тут мне помогает полиморфизм, потому что я добавил все эти три экземпляра разных объектов в одну коллекцию под их общим типом."); transports = new List <Transport>() { car, carWithElectronic, bicycle }; Console.WriteLine(); foreach (Transport transport in transports) { Console.WriteLine(transport.ToString()); } ConsoleTool.WriteLineConsoleGreenMessage("В качестве примера инкапсуляции можно рассмотреть метод StartEngine объекта CarWithElectronic, который сначало проверяет работают ли все системы должным образом, а только потом запускает базовый метод запуска мотора от класса Car."); ConsoleTool.WriteLineConsoleGreenMessage("Метод класса Car StartEngine сначало проверит, есть ли в баке авто топливо для запуска. Есть есть - мотор будет запущен. Если нет, выводится текст исключения. Это также пример инкапсуляции."); try { carWithElectronic.StartEngine(); } catch (TransportException ex) { Console.WriteLine(ex.Message); } try { carWithElectronic.ForcedStartEngine(); } catch (TransportException ex) { Console.WriteLine(ex.Message); } ConsoleTool.WriteLineConsoleGreenMessage("Давайте заправим этого зверя. Могли бы это сделать через метод. Но тут я хочу продемонстрировать инкапсуляцию на примере свойства. Перед присвоением здесь мы сначало сравним новое значение с максимальным, чтобы не переполнить топливный бак. И выставим то, что будет больше. Дальше попробуем снова запустить мотор."); try { carWithElectronic.AvailFuel = 100; } catch (TransportException ex) { Console.WriteLine(ex.Message); } try { carWithElectronic.ForcedStartEngine(); } catch (TransportException ex) { Console.WriteLine(ex.Message); } }
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()); } } }