Ta lekcja tyczy się instrukcji checked i unchecked, służą one do kontrolowanie przepełnień arytmetycznych. Różnica między jedną a drugą instrukcją jest taka, że checked podczas wystąpienia przepełnienie zgłasza wyjątek, a unchecked wyjątku nie zgłasza i przepełnienie jest ignorowane, a wartość przepełnienia jest dostosowywana do zmiennej. Ogólne deklaracje obydwóch instrukcji są takie same, mogą też ona występować w kontekście operatora:
Instrukcje:
checked
{
…
}
unchecked
{
…
}
Operatory:
checked(…);
unchecked(…);
Ok. przeprowadźmy kilka przykładów w których to wykorzystamy checked i unchecked jako instrukcjie i operatory:
Początek kodu:
using System;
class Pokaz
{
public static void Main()
{
byte x = 125;
byte y = 7;
byte z;
try
{
checked
{
z = (byte)(x * y);
}
}
catch (OverflowException)
{
Console.WriteLine(„Nastąpiło przepełnienie”);
}
}
}
Koniec kodu:
Jak widzisz w naszym kodzie nastąpiło przepełnienie, i został zgłoszony wyjątek. Teraz przeprowadzimy tą samą operację z tą różnicą, że checked będzie użyte jako operator.
Początek kodu:
using System;
class Pokaz
{
public static void Main()
{
byte x = 125;
byte y = 7;
byte z;
try
{
z = checked((byte)(x * y));
}
catch (OverflowException)
{
Console.WriteLine(„Nastąpiło przepełnienie”);
}
}
}
Koniec kodu:
Wynik działania ten sam. Pamiętaj, że jak stosujesz blok kodu z checked to w tym bloku kodu może znajdować się wiele instrukcji nie tylko te powodujące przepełnienie. Ok. teraz użyjemy unchecked, aby zignorować przepełnienie:
Początek kodu:
using System;
class Pokaz
{
public static void Main()
{
byte x = 125;
byte y = 7;
byte z;
unchecked
{
z = (byte) (x * y);
}
Console.WriteLine(„zmienna ‘z’ wynosi: ” + z);
}
}
Koniec kodu:
Jak widzisz w tym przypadku instrukcja unchecked mimo wystąpienia przepełnienie nie zgłasza wyjątku tylko je ignoruje i „ucina” wynik. Wynik jaki będzie zawierała zmienna w dużej mierze zależy od ustawień samego kompilatora. Działanie unchecked jako operatora prześledź sobie sam. Stosowanie tych instrukcji do kontroli przepełnień w naszych programach jest ważne i powinno wejść tobie w nawyk. Co wybrać, checked czy unchecked? Decyzja należy musisz wziąć pod uwagę to czy zmienna uczestniczy w ważnych obliczeniach, ale zazwyczaj powinno się zgłosić wyjątek i wyświetlić stosowy komunikat dla użytkownika.