Главная » Просмотр файлов » Г. Шилдт - С#4.0 Полное руководство

Г. Шилдт - С#4.0 Полное руководство (1160795), страница 135

Файл №1160795 Г. Шилдт - С#4.0 Полное руководство (Г. Шилдт - С#4.0 Полное руководство) 135 страницаГ. Шилдт - С#4.0 Полное руководство (1160795) страница 1352019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 135)

Ниже приведен пример применения оператора зсас)са11ос„ Продемонстрировать применение оператора згаска11пс. пз1пд Зузгеи) с1азз ПзеэгасХЛ11пс ( нсзаее зга11с чоьг( Мази() ( зпг* рггз = згасха11пс 1пг[З]г роге[0] = 1) резв[1] = 2) рсха[2] = 3) Гог(зпг 1=0) 1 < 3; зтт) Сппзп1е.игзгеъгпе(рсгз(1])) Вот к какому результату приводит выполнение кода из данного примера.

Создание буферов фиксированного размера Ключевое слово 1(хег( находит еще одно применение при создании одномерных массивов фиксированного размера. В документации на СЗ такие массивы называются буферами фиксированного размера. Такие буферы всегда являются членами структуры. Они предназначены для создания структуры, в которой содержатся элементы массива, образующие буфер. Когда элемент массива включается в состав структуры, в ней, как правило, хранится лишь ссылка на этот массив. Используя буфер фиксированного размера, в структуре можно разместить весь массив.

В итоге получается структура, пригодная в тех случаях, когда'важен ее размер, как, например, в многоязыковом программировании, при согласовании данных, созданных вне программы на СЗ, или же когда требуется неуправляемая структура, содержащая массив.

Но буферы фиксированного размера можно использовать только в небезопасном коде. 694 Часть!. Язык С№ Для создания буфера фиксированного размера служит следующая общая форма: 11хеб тип имя буфера[размер)Г Строка длиной 80 байтов, состоящая из 8-разрядных символов в коде АВС)) Числовое значение типа бопЬ1е длиной 8 байтов Маме Ва1апсе Числовое значение типа 1оп9 длиной 8 байтов В программе на С.н.

каждая структура содержит массив Мап(е, тогда как в программе на С)) в такой структуре хранится лишь ссылка на массив. Поэтому для правильного представления данных из этой структуры в С№ требуется буфер фиксированного размера, как показано ниже. Использовать буфер фиксированного .размера. опяате ясгосс Ргхебвапккесогб ( роЫбс Ггхеб Ьусе Мазе[80); // создать буфер фиксированного размера роЬ1ьс бооЫе Ва1апсег роЫгс 1опч 10; Когда буфер фиксированного размера используется вместо массива Масле, каждый экземпляр структуры Г1хебВап)сне согб будет содержать все 80 байтов массива Масле. Именно таким образом структура и организована в программе на Сн.

Следовательно, общий размер структуры ГьхебВапкнесогб окажется равным 96, т.е, сумме ее членов. Ниже приведена программа, демонстрирующая этот факт. Продемонстрировать применение буфера фиксированного размера. ОВ1лд зуяГЕвя /! Создать буфер фиксированного размера. опвауе яггосг Ргхебвапкяесогб ( роЫгс 11хеб Ьусе Маме(80)с роЫ1с боиЫе Ва1апсег рнЬ11с 1опч 10; ) с1аяя РгхебзггеВостег О Пометить метод Маги() как небезопасный.

опяате всас1с уогб Мата() ( Сопяо1е.нг1севьпе("Размер структуры Р1хебвапкяесогб: вггеос(гьхебВапквесогб)); ) ) Эта программа дает следующий результат. Размер структуры Ргхебвапккесогб: 98 где тип обозначает тип данных массива; имя буфера — конкретное имя буфера фиксированного размера; размер — количество элементов, образующих буфер. Буферы фиксированного размера могут указываться только в структуре. Для того чтобы стала очевиднее польза от буферов фиксированного размера, рассмотрим ситуацию, в которой программе ведения счетов, написанной на С++, требуется передать информацию о банковском счете.

Допустим также, что учетная запись каждого счета организована так, как показано ниже. Глава 20. Небезопасный код, указатели, обнуляемыегнпы н разные кмочевые слова 695 Размер структуры РфхесГВад хне со го оказывается в точности равным сумме ее членов, но так бывает далеко не всегда со структурами, содержащими буферы фиксированного размера.

Ради повышения эффективности кода общая длина структуры может быть увеличена для выравнивания по четной границе, например по границе слова. Поэтому общая длина структуры может оказаться на несколько байтов больше, чем сумма ее членов, даже если в ней содержатся буферы фиксированного размера. Как правило, аналогичное выравнивание длины структуры происходит и в С++. Следует, однако, иметь в виду возможные отличия в этом отношении.

И наконец, обратите внимание на то, как в данной программе создается буфер фиксированного размера вместо массива Навге. роь11с 81кеб ьусе назе~зОП // создать буфер фиксированного размера Как видите, размер массива указывается после его имени. Такое обозначение обычно принято в Стт и отличается в объявлениях массивов в СФ. В данном операторе распределяется по 80 байтов памяти в пределах каждого объекта типа Р1хебВапхнесогсГ.

Обнуляемые типы Начиная с версии 2.0, в Св внедрено средство, обеспечивающее изящное решение типичной и не очень приятной задачи распознавания и обработки полей, не содержащих значения, т.е. неинициализированных полей. Это средство называется обнуляемылг типом. Для того чтобы стала более понятной суть данной задачи, рассмотрим пример простой базы данных заказчиков, в которой хранится запись с именем, адресом, идентификационным номером заказчика, номером счета-фактуры и текущим остатком на счету. В подобной ситуации может быть вполне создан элемент данных заказчика, вкотором одно или несколько полей не инициализированы. Например, заказчик может просто запросить каталог продукции, и в этом случае номер счета-фактуры не потребуется, а значит, его поле окажется неиспользованным. Раньше для обработки неиспользуемых полей приходилось применять заполняющие значения или дополнительные поля, которые просто указывали, используется поле или нет.

Безусловно, заполняющие значения пригодны лишь в том случае, если они подставляются вместо значения, которое в противном случае окажется недействительным, но так бывает далеко не всегда. А дополнительные поля, указывающие, используется поле или нет, пригодны во всех случаях, но их ввод и обработка вручную доставляют немало хлопот. Оба эти затруднения позволяет преодолеть обнуляемый тип. Основы применения обнуляемыхтипов Обнуляемый тип — это особый вариант типа значения, представленный структурой. Помимо значений, определяемых базовым типом, обнуляемый тип позволяет хранить пустые значения (пс11).

Следовательно, обнуляемый тип имеет такой же диапазон представления чисел и характеристики, как и его базовый тип. Он предоставляет дополнительную возможность обозначить значение, указывающее на то, что переменная данного типа не инициализирована. Обнуляемые типы являются объектами типа Я уз гелг.

но 11аЬ1е<Т>, где Т вЂ” тип значения, которое не должно быть обнуляемым. ПРИМЕЧАНИЕ Обнуляемые эквиваленты могут быть только у типов значений. 696 Часть Е Язык 0№ Обнуляемый тип может быть указан двумя способами. Во-первых, обьекты типа Нп11аЬ1е<Т>, определенного в пространстве имен Бузгепь могут быть объявлены явным образом. Так, в приведенном ниже примере создаются обнуляемые переменные типа 1пг и Ьоо1. Бузпеи.нп11аЬ1е<гпп> сопим Зузпеи.нп11аЫе<Ьоо1> с)опе? И во-вторых, обнуляемый тип объявляется более кратким и поэтому чаще используемым способом с указанием знака ? после имени базового типа.

В приведенном ниже примере демонстрируется более распространенный способ объявления обнуляемых переменных типа 1пг и Ьоо1. ьпе? сопим Ьоо1? попе? Когда в коде применяются обнуляемые типы, создаваемый обнуляемый объект обычно выглядит следующим образом. 1пс? ооппп = пп11; В данной строке кода переменная поппе явно инициализируется пустым значением (пп11). Это вполне соответствует принятому правилу; прежде чем использовать переменную, ей нужно присвоить значение.

В данном случае присваиваемое значение означает, что переменная не определена. Значение может быть присвоено обнуляемой переменной обычным образом, поскольку преобразование базового типа в обнуляемый определено заранее. Например, в следующей строке кода переменной соппс присваивается значение 100. поппе = 100; Определить, имеет переменная обнуляемого типа пустое или конкретное значение, можно двумя способами. Во-первых, можно проверить переменную на пустое значение. Так, если переменная поппе объявлена так, как показано выше, то в следующей строке определяется, имеет ли эта переменная конкретное значение.

11(ооппг != пп11) О переменная имеет значение Если переменная попас не является пустой, то она содержит конкретное значение. И во-вторых, можно воспользоваться доступным только для чтения свойством Наз'ча1пе типа Ни11аЬ1е<Т>, чтобы определить, содержит ли переменная обнуляемого типа конкретное значение. Это свойство показано ниже. Ьоо1 Наача1ие Свойство Назуа1пе возвращает логическое значение Сгне, если экземпляр объекта, для которого оно вызывается, содержит конкретное значение, а иначе оно возвращает логическое значение Та1зе.

Ниже приведен пример, в котором конкретное значение обнуляемого объекта ооипс определяется вторым способом с помощью свойства Наз))а1пе. 11)поппе.назуа1пе) // переменная имеет значение Если обнуляемый объект содержит конкретное значение, то получить это значение можно с помощью доступного только для чтения свойства 1?а1пе типа Нп11аЬ1е<Т>. Т Уа1пе Глава 20.

Характеристики

Тип файла
DJVU-файл
Размер
7,66 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6417
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее