Настройка проверки на предмет возникновения условий переполнения в масштабах проекта 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Настройка проверки на предмет возникновения условий переполнения в масштабах проекта



 

Если создаётся приложение, в котором переполнение никогда не должно проходить незаметно, может выясниться, что обрамлять ключевым словом 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; просмотров: 266; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.146.221.52 (0.008 с.)