Как видите, результат вычисления непроверяемого выражения был усечен. А вычисление проверяемого выражения привело к исключительной ситуации.
В представленном выше примере программы было продемонстрировано применение ключевых слов checked и unchecked в одном выражении. А в следующем примере программы показывается, каким образом проверяется и не проверяется на переполнение целый блок операторов.
// Продемонстрировать применение ключевых слов checked // и unchecked в блоке операторов.
using System;
class CheckedBlocks { static void Main() { byte a, b; byte result;
a = 127; b = 127;
try {
unchecked { a = 127; b = 127;
result = unchecked((byte)(a * b));
Console.WriteLine('Непроверенный на переполнение результат: ' + result);
а = 125; b = 5;
result = unchecked((byte)(a * b));
Console.WriteLine('Непроверенный на переполнение результат: ' + result);
}
checked { a = 2; b = 7;
result = checked((byte)(a * b)); // верно
Console.WriteLine('Проверенный на переполнение результат: ' + result);
а = 127; b = 127;
result = checked((byte)(a * b)); // эта операция приводит к
// исключительной ситуации Console.WriteLine('Проверенный на переполнение результат: ' + result); //не подлежит выполнению
}
. }
catch (OverflowException exc) {
Console.WriteLine(exc);
}
}
}
Результат выполнения этой программы приведен ниже.
Непроверенный на переполнение результат: 1 Непроверенный на переполнение результат: 113 Проверенный на переполнение результат: 14 System.OverflowException: Переполнение в результате выполнения арифметической операции.
в CheckedDemo.Main() в
Как видите, результаты выполнения непроверяемого на переполнение блока операторов были усечены. Когда же в проверяемом блоке операторов произошло переполнение, то возникла исключительная ситуация.
Потребность в применении ключевого слова checked или unchecked может возникнуть, в частности, потому, что по умолчанию проверяемое или непроверяемое состояние переполнения определяется путем установки соответствующего параметра компилятора и настройки самой среды выполнения. Поэтому в некоторых программах состояние переполнения лучше проверять явным образом.
ГЛАВА 14 Применение средств ввода-вывода
В примерах программ, приводившихся в предыдущих главах, уже применялись отдельные части системы ввода-вывода в С#, например метод Console.
WriteLine (), но делалось это без каких-либо формальных пояснений. Система ввода-вывода основана в C# на иерархии классов, поэтому ее функции и особенности нельзя было представлять до тех пор, пока не были рассмотрены классы, наследование и исключения. А теперь настал черед и для ввода-вывода. В C# применяется система ввода-вывода и классы, определенные в среде .NET Framework, и поэтому рассмотрение ввода-вывода в этом языке относится ко всей системе ввода-вывода среды .NET в целом.
В этой главе речь пойдет о средствах консольного и файлового ввода-вывода. Следует, однако, сразу же предупредить, что система ввода-вывода в C# довольно обширна. Поэтому в этой главе рассматриваются лишь самые важные и наиболее часто используемые ее средства.
Организация системы ввода-вывода в C# на потоках
