checked キーワードは、整数の算術演算と変換のオーバーフロー チェックを明示的に有効にするために使用されます。
デフォルトでは、式に定数値のみが含まれている場合、結果の値がターゲット型の範囲外であるとコンパイラ エラーが発生します。式に 1 つ以上の非定数値が含まれている場合、コンパイラはオーバーフローを検出しません。次の例では、i2 に割り当てられた式を評価してもコンパイラ エラーは発生しません。
// The following example causes compiler error CS0220 because 2147483647 // is the maximum value for integers. //int i1 = 2147483647 + 10; // The following example, which includes variable ten, does not cause // a compiler error. int ten = 10; int i2 = 2147483647 + ten; // By default, the overflow in the previous statement also does // not cause a run-time exception. The following line displays // -2,147,483,639 as the sum of 2,147,483,647 and 10. Console.WriteLine(i2);
デフォルトでは、これらの非定数式は実行時にオーバーフローについてもチェックされず、これらの式はオーバーフロー例外を発生させません。上の例では、2 つの正の整数の合計として -2,147,483,639 が示されています。
オーバーフローチェックは、コンパイラオプション、環境設定、またはcheckedキーワードを使用して有効にできます。次の例は、チェックされた式またはチェックされたブロックを使用して、前の合計計算によって発生したオーバーフローを実行時に検出する方法を示しています。どちらの例もオーバーフロー例外をスローします。
// If the previous sum is attempted in a checked environment, an // OverflowException error is raised. // Checked expression. Console.WriteLine(checked(2147483647 + ten)); // Checked block. checked { int i3 = 2147483647 + ten; Console.WriteLine(i3); }
オーバーフロー チェックは unchecked を使用してキャンセルできます
この例では、checked を使用して実行時オーバーフロー チェックを有効にする方法を示します。
class OverFlowTest { // Set maxIntValue to the maximum value for integers. static int maxIntValue = 2147483647; // Using a checked expression. static int CheckedMethod() { int z = 0; try { // The following line raises an exception because it is checked. z = checked(maxIntValue + 10); } catch (System.OverflowException e) { // The following line displays information about the error. Console.WriteLine("CHECKED and CAUGHT: " + e.ToString()); } // The value of z is still 0. return z; } // Using an unchecked expression. static int UncheckedMethod() { int z = 0; try { // The following calculation is unchecked and will not // raise an exception. z = maxIntValue + 10; } catch (System.OverflowException e) { // The following line will not be executed. Console.WriteLine("UNCHECKED and CAUGHT: " + e.ToString()); } // Because of the undetected overflow, the sum of 2147483647 + 10 is // returned as -2147483639. return z; } static void Main() { Console.WriteLine("\nCHECKED output value is: {0}", CheckedMethod()); Console.WriteLine("UNCHECKED output value is: {0}", UncheckedMethod()); } /* Output: CHECKED and CAUGHT: System.OverflowException: Arithmetic operation resulted in an overflow. at ConsoleApplication1.OverFlowTest.CheckedMethod() CHECKED output value is: 0 UNCHECKED output value is: -2147483639 */ }
上記は、C# の使用方法のチェック済みおよび未チェックの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) を参照してください。