From the C# specification:
The following operations are affected by the overflow checking context established by the checked and unchecked operators and statements:
- The predefined ++ and -- unary operators (§7.5.9 and §7.6.5), when the operand is of an integral type.
- The predefined - unary operator (§7.6.2), when the operand is of an integral type.
- The predefined +, -, *, and / binary operators (§7.7), when both operands are of integral types.
- Explicit numeric conversions (§6.2.1) from one integral type to another integral type, or from float or double to an integral type.
The checked and unchecked operators only affect the overflow checking context for those operations that are textually contained within the "(" and ")" tokens. The operators have no effect on function members that are invoked as a result of evaluating the contained expression.
This means you'll still get an overflow exception with following code even if you specify unchecked explicitly (Make sure you are building with /checked):
In short unchecked is to supress overflow checking for the operators mentioned above. It is not something special to catch the OverFlowException! In IL you can see that if you are using checked we'll use special instructions (*.ovf*).