fork download
  1. using System;
  2. using static System.Console;
  3.  
  4. public class OverFlowTest {
  5. // Tamanho máximo de um int
  6. static int maxIntValue = 2147483647;
  7.  
  8. static int CheckedMethod() {
  9. int z = 0;
  10. try {
  11. // Vai estourar o limite e vai lanar exceção.
  12. z = checked(maxIntValue + 10);
  13. } catch (OverflowException e) {
  14. WriteLine("CHECKED lançou a exceção: " + e.ToString());
  15. }
  16. // o z não teve seu valor reatribuido
  17. return z;
  18. }
  19.  
  20. static int UncheckedMethod() {
  21. int z = 0;
  22. try {
  23. // Não vai gerar exceção
  24. z = maxIntValue + 10;
  25. } catch (OverflowException e) {
  26. // isso não srá executado
  27. WriteLine("UNCHECKED lançou a exceção: " + e.ToString());
  28. }
  29. // oi valor de zestará errado por causa do estouro: 2147483647 + 10 é o mesmo que -2147483639.
  30. // obviamente você esperava um valor positivo, mas ele vira e começa contar os 10 do menor número possível
  31. // se quiser entender mais veja http://pt.stackoverflow.com/q/47724/101
  32. return z;
  33. }
  34.  
  35. public static void Main() {
  36. WriteLine($"CHECKED tem o valor: {CheckedMethod()}");
  37. WriteLine($"UNCHECKED tem o valor: {UncheckedMethod()}");
  38. }
  39. }
  40.  
  41. //https://pt.stackoverflow.com/q/157342/101
Success #stdin #stdout 0.02s 16524KB
stdin
Standard input is empty
stdout
CHECKED lançou a exceção:  System.OverflowException: Arithmetic operation resulted in an overflow.
  at OverFlowTest.CheckedMethod () [0x00002] in <4febaa8d0a43478781ad9f35071d24aa>:0 
CHECKED tem o valor: 0
UNCHECKED tem o valor: -2147483639