예제 #1
0
        static void Main(string[] args)
        {
            Console.Write("Введите кол-во колес : ");
            uint countWheels;

            if (!Utils.TryEnterNumberFromConsole(out countWheels))
            {
                HandleIncorrectEntar();
                return;
            }

            Console.Write("Введите кол-во дверей : ");
            uint countDoors;

            if (!Utils.TryEnterNumberFromConsole(out countDoors))
            {
                HandleIncorrectEntar();
                return;
            }

            Car car = new Car((int)countWheels, (int)countDoors, "Запорожец");

            foreach (Detail detail in car.Details)
            {
                IRotatable rotatableDetail = detail as IRotatable;
                if (rotatableDetail != null)
                {
                    rotatableDetail.Move();
                }
            }

            Console.Write("Введите номер двери : ");
            uint doorNumber;

            if (Utils.TryEnterNumberFromConsole(out doorNumber))
            {
                HandleIncorrectEntar();
                return;
            }
            foreach (Detail detail in car.Details)
            {
                Door door = detail as Door;
                if (door != null && door.Number == doorNumber - 1)
                {
                    door.Open();
                    break;
                }
            }

            Console.Read();
        }
예제 #2
0
        static void Main(string[] args)
        {
            Console.WriteLine(">>>>> Приложение \"Автомобиль\" <<<<<\r\n");

            Console.Write("Введите модель автомобиля: ");
            string carModel = Console.ReadLine();

            Console.Write("Введите количество колес: ");
            uint numberOfWheels = UInt32.Parse(Console.ReadLine());

            Console.Write("Введите количество дверей: ");
            uint numberOfDoors = UInt32.Parse(Console.ReadLine());

            Car car = new Car(numberOfWheels, numberOfDoors, carModel);

            do
            {
                Console.Write("\nВыберите действие: M - Move, O - Open door: ");
                switch (Console.ReadLine())
                {
                case "M":
                    foreach (Detail detail in car.detailsArray)
                    {
                        // Можно переписать по-другому (см. ниже)
                        IRotatable detail1 = detail as IRotatable;
                        if (detail1 != null)
                        {
                            detail1.Move();
                        }

                        //(detail as IRotatable)?.Move(); - Это "синтаксический сахар"???

                        /*
                         * if (detail as IRotatable != null)
                         * {
                         *  ((IRotatable)detail).Move(); // Не понятно, почему работает именно так
                         *  // типа, если он объект класса реализует такой интерфейс(наследуется), то он является таким типом???
                         * }
                         */
                    }
                    break;

                case "O":
                    Console.Write("Введите номер двери или 0 для рамы: ");
                    uint doorNumber = UInt32.Parse(Console.ReadLine());

                    if (doorNumber == 0)
                    {
                        foreach (Detail detail in car.detailsArray)
                        {
                            // Можно переписать по-другому (см. ниже)
                            Body detail1 = detail as Body;
                            if (detail1 != null)
                            {
                                detail1.Open();
                            }
                        }
                    }
                    else
                    {
                        bool isDoorExistInCar = false;

                        foreach (Detail detail in car.detailsArray)
                        {
                            // Можно переписать по-другому (см. ниже)
                            //
                            Door door = detail as Door;
                            if (door != null && door.Number == doorNumber)
                            {
                                door.Open();
                                isDoorExistInCar = true;
                                break;
                            }
                            //

                            // Это "синтаксический сахар" для операции "... is ..."??? (было предложено студией)

                            /*
                             * if (detail is Door door)
                             * {
                             *  door.Open();
                             * }
                             */
                        }

                        if (!isDoorExistInCar)
                        {
                            Console.WriteLine("Двери с таким номером не существует!");
                        }
                    }
                    break;

                default:
                    Console.WriteLine("Выбрано некорректное действие!");
                    break;
                }
                Console.Write("\r\nДля повтора введите 'r', для выхода - любой символ: ");
            }while (Console.ReadLine() == "r");
        }