C# CHECKED I UNCHECKED


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.