23

チェックされたブロックとチェックされていないブロックが正確に何であるかを誰かが説明できますか?
そして、いつそれぞれを使用する必要がありますか?

4

3 に答える 3

39

算術オーバーフロー。例えば:

int i = int.MaxValue -10;
checked {       
   i+= 20; // boom: OverflowException
           // "Arithmetic operation resulted in an overflow."
}

したがって、偶発的なオーバーフローやラップアラウンドを問題にしcheckedたくない場合に使用し、むしろ例外を確認したい場合に使用します。

uncheckedオーバーフローを許可するモードを明示的に設定します。uncheckedコード(上記)またはコンパイラスイッチ(/checkedcsc )を介して、コンパイラに別の方法で指示しない限り、デフォルトはです。

于 2011-03-07T09:27:40.093 に答える
13

MSDNから

C# ステートメントは、checked または unchecked コンテキストで実行できます。チェックされたコンテキストでは、算術オーバーフローによって例外が発生します。チェックされていないコンテキストでは、算術オーバーフローは無視され、結果は切り捨てられます。

つまり、算術演算が行われるコンテキストを定義するために使用されます。チェックされたコンテキストでは、オーバーフローが発生すると例外がスローされます。チェックされていないコンテキストでは、例外はスローされず、代わりに値がラップアラウンドされます。

現在、コンテキストがチェックされていないかチェックされているかは、コンパイラ オプションによって異なります。したがって、コンテキストを手動で上書きしたい場合、つまり、チェックされていないコンテキストでチェックされた操作を実行する場合、またはその逆の場合は、これらのキーワードを使用する必要があります。

詳細と例については、上記のリンクをたどってください。

于 2011-03-07T09:26:39.020 に答える