Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Настройка проверки на предмет возникновения условий переполнения в масштабах проектаСодержание книги
Поиск на нашем сайте
Если создаётся приложение, в котором переполнение никогда не должно проходить незаметно, может выясниться, что обрамлять ключевым словом checked приходится раздражающе много строк кода. На такой случай в качестве альтернативного варианта в компиляторе С# поддерживается флагкомпилятора /checked. При активизации этого флага проверке на предмет возможного переполнения будут автоматически подвергаться все имеющиеся в коде арифметические операции, без применения для каждой из них ключевого слова checked. Обнаружение переполнения точно так же приводит к генерации соответствующего исключения во время выполнения. Для активизации этого флага в среде разработки Visual Studio 2010 необходимо открыть страницу свойств проекта, перейти на вкладку «Построение», нажать на кнопке «Дополнительно» и в открывшемся диалоговом окне отметить флажок « Проверять арифметические переполнения и потери точности »:
Рис. 7. 1. Дополнительные параметры построения: отмечаем нужный пункт
Важно отметить, что в С# предусмотрено ключевое слово unchecked, которое позволяет отключить выдачу связанного с переполнением исключения в отдельных случаях. Итак, чтобы подвести итог по использованию в С# ключевых слов checked и unchecked, следует отметить, что по умолчанию арифметическое переполнение в исполняющей среде.NET игнорируется. Если необходимо обработать отдельные операторы, то должно использоваться ключевое слово checked, а если нужно перехватывать все связанные с переполнением ошибки в приложении, то понадобится активизировать флаг /checked. Что касается ключевого слова unchecked, то его можно применять при наличии блока кода, в котором переполнение является допустимым (и, следовательно, не должно приводить к генерации исключения во время выполнения). Роль класса System.Convert
В завершении темы преобразования типов данных стоит отметить, что в пространстве имен System имеется класс Convert, который тоже может применяться для расширения и сужения данных:
byte sum = Convert.ToByte(var1 + var2);
Одно из преимуществ подхода с применением класса System.Convert связано с тем, что он позволяет выполнять преобразования между типами данных нейтральным к языку образом (например, синтаксис приведения типов в Visual Basic полностью отличается от предлагаемого для этой цели в С#). Однако, поскольку в С# есть операция явного преобразования, использование класса Convert для преобразования типов данных обычно является делом вкуса.
9. Исключения преобразования типов во время выполнения
В некоторых преобразованиях ссылочного типа компилятор не может определить, допустимо ли приведение. Для операции приведения возможна корректная ошибка компилятора во время выполнения. Как показано в следующем примере, приведение типов, которое заканчивается с ошибкой во время выполнения, вызывает InvalidCastException:
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace LC_Console { class Animal { public void Eat() { Console.WriteLine("Можно есть."); } public override string ToString() { return "Я - жЫвотное."; } } class Reptile: Animal { } class Mammal: Animal { }
class Program { static void Main() { Test(new Mammal()); Console.WriteLine("Для продолжения нажмите любую клавишу... "); Console.ReadKey(); }
static void Test(Animal a) { // Вызввает исключение InvalidCastException во время запуска // Mammal не конвертируется в Reptile Reptile r = (Reptile)a; } } } /* Выведет (после запуска выдаст исключение): * <ничего не выведет> */
C# предоставляет операторы is и as, чтобы можно было проверить совместимость перед действительным выполнением приведения.
Дополнительные сведения о операторах привидения можно посмотреть в разделе Практическое руководство. Безопасное приведение с помощью операторов as и is (Руководство по программированию на C#) (http://msdn.microsoft.com/ru-ru/library/cc488006.aspx).
|
||||
Последнее изменение этой страницы: 2016-12-28; просмотров: 316; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 52.15.35.129 (0.006 с.) |