Может кто-нибудь объяснить мне, что именно отмечен блок не отмечен?
И когда я должен использовать каждый?
Контрольный блок С#
Ответ 1
Арифметическое переполнение; например:
int i = int.MaxValue -10;
checked {
i+= 20; // boom: OverflowException
// "Arithmetic operation resulted in an overflow."
}
Поэтому используйте checked
, если вы не хотите, чтобы случайный переполнение/обертка была проблемой, и скорее увидели бы исключение.
unchecked
явно устанавливает режим, позволяющий переполнение; по умолчанию это unchecked
, если вы не укажете компилятору иначе - либо с помощью кода (выше), либо с помощью компилятора (/checked
в csc).
Ответ 2
От MSDN
Операторы С# могут выполняться либо в проверенный или непроверенный контекст. В проверенный контекст, арифметическое переполнение вызывает исключение. В бесконтрольном контекст, арифметическое переполнение игнорируется, и результат усекается.
Короче говоря, они используются для определения контекста, в котором происходят арифметические операции. В проверенном контексте исключение возникает при переполнении. В неконтролируемом контексте исключение не выбрасывается, а значение обернуто вокруг.
Теперь, независимо от того, установлен ли ваш контекст или отмечен флажок, зависит от ваших параметров компилятора. Поэтому, если вы хотите вручную переопределить контекст, т.е. Выполнить проверочную операцию в противном случае неконтролируемый контекст или наоборот, вы должны использовать эти ключевые слова.
Для получения более подробной информации и примеров следуйте приведенной выше ссылке.
Ответ 3
проверенные блоки используются для обработки арифметических ситуаций переполнения/недогрузки. Например:
Предположим, вы хотите преобразовать значение int в короткое значение типа (называемое сужающим преобразованием). переменная типа int может иметь диапазон значений от -2,147,483,648 до 2,147,483,647. Но короткий может иметь только от -32,768 до 32,767.
По этой причине короткая переменная не может иметь все возможные значения, которые может иметь переменная int. Если какой-то способ, можно привести следующий пример:
int y = 1000000000;
short x = (short)y;
Ясно, что вы можете увидеть, что значение y находится вне допустимых значений для короткой переменной. Таким образом, происходит арифметическое переполнение.
По умолчанию С# не выдает никаких исключений для вышеуказанного кода. Но есть несколько способов выкинуть исключение и обработать его. В этом случае проверенные блоки пригодится
try
{
checked
{
int y = 1000000000;
short x = (short)y;
}
}
catch (OverflowException ex)
{
MessageBox.Show("hey, we got a overflow/underflow situation");
}
catch (Exception ex)
{
MessageBox.Show("Error");
}
catch block вызвал выброс исключения переполнения, если кастинг вызвал ситуацию с переполнением/недостаточным потоком. В этом случае отображается сообщение об ошибке
"эй, у нас ситуация с переполнением/недостаточным"
непроверенные блоки используются, если мы хотим отменить переполнение/переполнение при преобразовании и продолжить операцию.