d
checked
Оператор checked применяется для проверки на переполнение, которое возникает при выполнении арифметических действий с целочисленными значениями.
Если в блоке checked происходит переполнение, то вызывается исключение.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
using System; class One { byte a = 254; byte b; public One(byte arg) { b = arg; } public void Result() { checked { Console.WriteLine("{0} + {1} = {2}", a, b, ((byte)(a + b))); } } } class Program { public static int Main() { Console.Write("введите число : "); byte val = byte.Parse(Console.ReadLine()); One O = new One(val); O.Result(); Console.ReadKey(); return 0; } } |
1 2 3 4 5 6 |
введите число : 2 Необработанное исключение: System.OverflowException: Переполнение в результате выполнения арифметической операции. в One.Result() в d:\project\newCSharpConsole\0001\Main.cs:строка 11 в Program.Main() в d:\project\newCSharpConsole\0001\Main.cs:строка 21 Для продолжения нажмите любую клавишу . . . |
Оператор unchecked применяется для проверки на переполнение, которое возникает при выполнении арифметических действий с целочисленными значениями.
Если в блоке unchecked происходит переполнение, то исключение не вызывается.
Если не указывать блок unchecked, то так же происходит переполнение. Тогда, какой смысл его указывать?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
using System; class One { byte a = 254; byte b; public One(byte arg) { b = arg; } public void Result1() { //если произойдет переполнение, то исключение вызвано не будет unchecked { Console.WriteLine("{0} + {1} = {2}", a, b, ((byte)(a + b))); } } public void Result2() { //то же самое без оператора unchecked Console.WriteLine("{0} + {1} = {2}", a, b, ((byte)(a + b))); } } class Program { public static int Main() { Console.Write("введите число : "); byte val = byte.Parse(Console.ReadLine()); One O = new One(val); O.Result1(); O.Result2(); Console.ReadKey(); return 0; } } |
1 2 3 |
введите число : 2 254 + 2 = 0 254 + 2 = 0 |