|
Программирование >> Программирование с использованием ajax
не осуществляется, как по строкам кода остальной части приложения. Приложение начинает выполняться в привычном месте и имеет доступ к новому типу потому, что относится к тому же самому пространству имен. Первая итерация примера демонстрирует базовый метод создания переменной нового типа, присваивания ей значения и вывода этого значения на экран. Далее код изменяется так, чтобы он иллюстрировал преобразование значений перечисления в другие типы. Обратите внимание, что здесь требуются явные преобразования. Хотя базовым типом orientation и является byte, для преобразования значения myDirection в byte все равно нужно использовать приведение (byte): directionByte = (byte)myDirection; Точно такое же явное приведение необходимо и в обратном направлении, при желании преобразовать byte в orientation. Например, для преобразования переменной типа byte по имени myByte в переменную типа orientation и присваивания полученного значения переменной myDirection можно воспользоваться следующим кодом: myDirection = (orientation)myByte; Конечно, здесь нужно соблюдать осторожность, поскольку не все допустимые значения переменной типа byte отображаются на определенные значения переменной orientation. Тип orientation может хранить другие значения byte, поэтому никакая ошибка сразу не возникнет, но это может привести к нарушению логики позже в приложении. Для получения строковой версии значения перечисления можно применять команду Convert.ToString(): directionString = Convert.ToString(myDirection); Операция приведения (string) здесь работать не будет, поскольку необходимая обработка подразумевает нечто более чем просто помещение хранящихся в переменной типа перечисления данных в переменную string. В качестве альтернативного варианта можно использовать команду ToString () на самой переменной. Следующий код даст тот же самый результат, что и применение Convert. ToString (): directionString = myDirection.ToString (); Преобразование строки (string) в значение перечисления тоже возможно, но только требуемый для этого синтаксис выглядит немного сложнее. Для выполнения преобразования подобного рода предусмотрена специальная команда - Enum. Parse (), которая применяется следующим образом: {тип перечисления) Enum. Parse (typeof {тип перечисления) , строка значения перечисленния) ; Здесь используется еще одна операция - typeof, которая получает информацию о типе своего операнда. В случае типа orientation этим можно было бы воспользоваться следующим образом: string myString = north ; orientation myDirection = (orientation) Enum. Parse (typeof (orientation) , myString); Разумеется, не все строковые значения будут отображаться на значение orientation. В случае передачи значения, которое не отображается ни на одно из значений перечисления, будет выдаваться ошибка. Как и все остальные вещи в языке С#, такие значения являются чувствительными к регистру, поэтому ошибка будет выдаваться даже в том случае, если строка соответствует значению во всем, кроме регистра (например, в случае установки myString в North, а не в north). Структуры Следующим видом переменных, который мы рассмотрим, являются структуры (struct). Структуры представляют собой именно то, о чем и говорит их название, т.е. структуры данных, состоящие из нескольких блоков данных, возможно, даже разного типа. Они позволяют определять свои собственные типы переменных на основании данной структуры. Например, предположим, что требуется сохранить информацию о маршруте к месту назначения из начальной точки, и что эта информация состоит из сведений о направлении и о расстоянии (в милях). Для простоты предположим, что направление соответствует позициям компаса и, соответственно, может быть представлено с помощью приведенного в предыдущем разделе перечисления orientation, и что исчисляемое в милях расстояние может быть представлено типом double. Тогда получается, что для сохранения этих сведений можно использовать две отдельных переменных: orientation myDirection; double myDistance; Ничего неправильного в применении двух таких переменных нет, но все-таки гораздо проще будет (особенно при необходимости сохранения информации о множестве маршрутов) использовать для сохранения этой информации одно место. Определение структур Структуры определяются с помощью ключевого слова struct показанным ниже образом: struct <имя типа> <объявления членовУ В разделе <объявления членов> содержатся объявления переменных (называемых данными-членами структуры) в практически том же самом формате, что и обычно. Объявление каждого члена имеет следующий вид: <уровень доступа> <тип> <имя>; Для предоставления вызывающему структуру коду возможности получать доступ к ее данным-членам на месте <уровень доступа> помещается ключевое слово public. Например: struct route { public orientation direction; public double distance; После определения типа структуры начинать пользоваться ее можно, определив переменные нового типа: route myRoute; Помимо этого, можно обращаться к данным-членам этой сложной переменной с помощью символа точки: myRoute.direction = orientation.north; myRoute.distance = 2.5; Bee это иллюстрируется в следующем практическом занятии на примере использования ранее определенного перечисления orientation с показанной выше струк- 3. Запустите приложение, а затем укажите направление вводом числа в диапазоне от 1 до 4 и расстояние. На рис. 5.8 показан результат, который должен получиться. турой route, над которой в коде проводятся различные манипуляции, позволяющие получить представление о работе структуры. ттрактичесгоё занятие Использование структуры 1. Создайте новое консольное приложение по имени Ch05Ex03 и сохраните его в каталоге С:\BegVCSharp\Chapter05. 2. Добавьте в файл Program, cs следующий код: namespace Ch05Ex03 { enum orientation : byte { north = 1, south = 2, east = 3, west = 4 struct route { public orientation directions-public double distance; class Program { static void Main(string [ ] args) { route myRoute; int myDirection = -1; double myDistance; Console.WriteLineCl) North\n2) South\n3) East\n4) West ); Console.WriteLine ( Select a direction: ) ; Выберите направление: myDirection = Convert.ToInt32 (Console.ReadLine()) ; while ((myDirection < 1) (myDirection > 4)) ; Console. WriteLine ( Input a distance: ) ; Введите расстояние myDistance = Convert.ToDouble(Console.ReadLine()); myRoute.direction = (orientation)myDirection; myRoute.distance = myDistance; Console.WriteLine ( myRoute specifies a direction of {0) and a + distance of {1} , myRoute.direction, myRoute.distance); Вывод информации о направлении и расстоянии Console.ReadKey();
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |