|
Программирование >> Программирование с использованием ajax
Рис. 5.8. Приложение Ch05Ex03 в действии Описание полученных результатов Структуры, как и перечисления, объявляются за пределами основного тела кода. В частности, в данном примере структура route объявляется прямо внутри того же пространства имен, что и перечисление orientation, использование которого она подразумевает: enum orientation : byte { north = 1, south = 2, east = 3, west = 4 struct route { public orientation direction; public double distance; Основное тело кода следует за структурой подобно тому, как уже показывалось в этой главе в другом примере, и предусматривает запрос входных данных у пользователя с последующим их отображением. Для вводимых пользователем данных обеспечивается выполнение простой верификации путем помещения отвечающего за выбор направления кода в цикл do, отклоняющий любые входные данные, которые не являются целым числом в диапазоне от 1 до 4 (такие значения были выбраны для того, чтобы они отображались на значения перечисления и тем самым упрощали выполнение операций присваивания). Входные данные, которые не будут распознаваться как цеяое число, приводят к ошибке. О том, почему это происходит, более подробно рассказывается позже в книге. Интересным моментом, на который стоит обратить внимание, является то, что при обращении к членам route, они обрабатываются в точности тем же образом, что и переменные того же типа обрабатывались бы в качестве члена. Операция присваивания выглядит так: myRoute.direction = (orientation)myDirection; myRoute.distance = myDistance; Входное значение можно и просто поместить непосредственно в myRoute. distance безо всяких негативных последствий: myRoute.distance = Convert.ToDouble(Console.ReadLine()); Такой дополнительный шаг обеспечил бы возможность выполнения дополнительной проверки правильности входных данных, но в коде такой проверки не преду- смотрено. Любой доступ к членам структуры воспринимается единообразно. Можно сказать, что выражения вида structVar .memberVar в результате вычисления дают переменную типа memberVar. Массивы у всех рассмотренных до этого типов была одна общая черта: каждый из них позволял хранить одно единственное значение (или один единственный набор значений, если брать структуры). Однако бывают ситуации, в которых требуется сохранять много данных, и в таких ситуациях эти типы переменных являются не очень удобными. Иногда бывает необходимо сохранять несколько значений одного и того же типа одновременно без использования для каждого из них отдельной переменной. Например, предположим, что требуется выполнить некоторую обработку имен всех друзей. Можно объявить простые строковые переменные: string friendNamel = Robert Harwell ; string friendName2 = Mike Parry ; string friendNameS = Jeremy Beacock ; Ho такой подход, похоже, потребует приложения массы усилий, особенно из-за того, что для обработки каждой переменной придется писать отдельный код. Организовать проход по этому списку строк в цикле не получится. Однако существует и альтернативный подход, который предусматривает применение массива (array). Массивы - это проиндексированные списки переменных, хранящиеся в единственной переменной типа массива. Например, для хранения трех показанных выше имен можно создать массив под названием f riendNames. Получать доступ к отдельным членам этого массива можно будет указанием их индекса в квадратных скобках: f riendNames [<индекс>] Этот индекс представляет собой просто целое число. Для первого элемента в массиве этим числом будет О, для второго - 1 и т.д. Это означает, что по элементам массива можно проходить в цикле: int i; for (i = 0; i < 3; i++) { Console.WriteLine( Name with index of {0}: {1} , i, friendNames[i]); Вывод имени с определенным индексом Массивы имеют один единственный базовый тип, т.е. все отдельные вхождения в массиве относятся к одному и тому же типу. Например, базовым типом приведенного здесь в качестве примера массива f riendNames является string, поскольку этот массив предназначен для хранения переменных типа string. Записи в массивах также часто называют элементами. Объявление массивов Объявляются массивы следующим образом: <базовый тип>[] <имя>; Здесь на месте <базовый тип> может указываться любой тип переменных, включая такие демонстрировавшиеся ранее в главе типы, как перечисления и структуры. Массивы должны обязательно инициализироваться перед тем, как к ним можно будет получить доступ. Получать доступ или присваивать значения элементам массива, как показано ниже, нельзя: int[] mylntArray; myIntArray[10] = 5; Инициализировать массивы можно двумя способами: указанием всего содержимого массива в литеральной форме либо указанием размера массива и применением ключевого слова new для инициализации всех его элементов. Спецификация массива с использованием литеральных значений подразумевает предоставление заключенного в фигурные скобки списка разделенных запятыми значений для элементов: int[] mylntArray = {5, 9, 10, 2, 99}; Здесь задается массив mylntArray, состоящий из пяти элементов, каждому из которых присваивается целочисленное значение. Второй подход требует применения следующего синтаксиса: int [ ] mylntArray = new int[5]; Здесь ключевое слово new используется для явной инициализации массива, а константное значение - для определения его размера. Такой подход приводит к присваиванию все членам массива значения по умолчанию, каковым для числовых типов является 0. Для такой инициализации можно также применять и переменные с неконстантными значениями: int[] mylntArray = new int[arraySize]; При желании оба подхода можно комбинировать: int[] mylntArray = new int[5] {5, 9, 10, 2, 99}; В случае применения такой техники размеры должны обязательно совпадать. То есть использовать следующую строку кода нельзя: int[] mylntArray = new int [10] {5, 9, 10, 2, 99}; Здесь массив определен как состоящий из 10 членов, но инициализированы только 5 членов, поэтому компиляция не удастся. Побочным эффектом такого подхода является еще и то, что если размер определяется через переменную, то эта переменная должна быть обязательно константной: const int arraySize = 5; int[] mylntArray = new int [arraySize] (5, 9, 10, 2, 99}; Если опустить слово const, код компилироваться не будет. Как и другие типы переменных, инициализировать массив в той же самой строке, в которой он объявляется, не обязательно. Например, следующий подход является вполне допустимым: int[] mylntArray; mylntArray = new int[5]; Теперь пришла пора испробовать какой-нибудь настоящий код. В следующем практическом занятии на приведенном в начале этого раздела примере демонстрируется создание и манипуляции массивом строк. Лра1стическое занятие ИспОЛЬЗОВание масСИВЭ 1. Создайте новое консольное приложение по имени C]i05Ex04 и сохраните его в каталоге С: \BegVCSliarp\C]iapter05. 2. Добавьте в файл Program, cs следующий код:
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |