Here I am going to explain what the use of checked and unchecked keyword in C#. Here I am taking the some content from MSDN to explain about it. A checked context, arithmetic overflow raises an exception. In an unchecked context, arithmetic overflow is ignored and the result is truncated.
- Checked Specify checked context.
- unchecked Specify unchecked context.
The following operations are affected by the overflow checking:
- Expressions using the following predefined operators on integral types:
++ — - (unary) + - * / - Explicit numeric conversions between integral types.
The checked/unchecked compiler option lets you specify checked or unchecked context for all integer arithmetic statements that are not explicitly in the scope of a checked or unchecked keyword. Now I am going to explain one by one.
Checked
The checked keyword is used to control the overflow-checking context for integral-type arithmetic operations and conversions. It can be used as an operator or a statement according to the following forms.
The checked statement:
The checked statement:
checked block
The statement block that contains the expressions to be evaluated in a checked context.
The checked operator:
checked (expression)
The expression to be evaluated in a checked context. Notice that the expression must be in parentheses ( ).
Unchecked
The unchecked keyword is used to control the overflow-checking context for integral-type arithmetic operations and conversions. It can be used as an operator or a statement according to the following forms.
The unchecked statement :
The unchecked statement :
unchecked block
The statement block that contains the expressions to be evaluated in an unchecked context.
The unchecked operator :
The unchecked operator :
unchecked (expression)
The expression to be evaluated in an unchecked context. Notice that the expression must be in parentheses ( ).
Example
namespace Checked_Unchecked
{
class Program
{
public short a = 30000;
public short b = 20000;
public short c;
public int Add()
{
try
{
c = checked((short)(a + b));
}
catch (System.OverflowException e)
{
System.Console.WriteLine(e.ToString());
}
return c;
}
public int Mul()
{
try
{
checked
{
c = (short)(a * b);
}
}
catch (System.OverflowException e)
{
System.Console.WriteLine(e.ToString());
}
return c;
}
public int Add_Unchecked()
{
try
{
c = unchecked((short)(a + b));
}
catch (System.OverflowException e)
{
System.Console.WriteLine(e.ToString());
}
return c;
}
public int Mul_Unchecked()
{
try
{
unchecked
{
c = (short)(a * b);
}
}
catch (System.OverflowException e)
{
System.Console.WriteLine(e.ToString());
}
return c;
}
static void Main(string[] args)
{
Program p = new Program();
// For checked
Console.WriteLine("Checked output value is: {0}", p.Add());
Console.WriteLine("Checked output value is: {0}", p.Mul());
// For Unchecked
Console.WriteLine("Checked output value is: {0}", p.Add_Unchecked());
Console.WriteLine("Checked output value is: {0}", p.Mul_Unchecked());
Console.ReadKey(true);
}
}
}
Output
Output