C#-এ ইন্টিজার অ্যারিথমেটিক ওভারফ্লো হ্যান্ডলিংয়ের জন্য checked এবং unchecked কন্টেক্স্ট/ব্লক ব্যবহার করা হয়।
Checked Context (ওভারফ্লো চেক সক্রিয়)
- ওভারফ্লো হলে
OverflowExceptionনিক্ষেপ করা হয়। - কম্পাইলার অপশন
/checked+বা কোডেcheckedব্লক দিয়ে সক্রিয়।
Unchecked Context (ওভারফ্লো উপেক্ষা)
- ওভারফ্লো হলে সাইলেন্টলি র্যাপ-অরাউন্ড (wrap-around) হয়।
- ডিফল্ট বিল্ড কনফিগারেশনে অনচেকড।
uncheckedকিওয়ার্ড দিয়ে eksplisittly নিষ্ক্রিয়।
উদাহরণ: Checked
using System;
class CheckedDemo
{
static void Main()
{
int max = int.MaxValue; // 2147483647
try
{
int result = checked(max + 10); // OverflowException
Console.WriteLine(result);
}
catch (OverflowException ex)
{
Console.WriteLine("Checked: OverflowException caught!");
Console.WriteLine(ex.Message);
}
}
}
উদাহরণ: Unchecked
using System;
class UncheckedDemo
{
static void Main()
{
int max = int.MaxValue; // 2147483647
int result = unchecked(max + 10); // কোনো এক্সেপশন নেই
Console.WriteLine("Unchecked result: " + result); // -2147483639 (wrap-around)
}
}
আউটপুট
// Checked:
Checked: OverflowException caught!
Arithmetic operation resulted in an overflow.
// Unchecked:
Unchecked result: -2147483639
কখন কী ব্যবহার করবেন
| পরিস্থিতি | সুপারিশ |
|---|---|
| ফিনান্সিয়াল/ক্রিটিক্যাল ক্যালকুলেশন | checked (সেফটি) |
| হ্যাশ কোড, র্যান্ডম, বিট ম্যানিপুলেশন | unchecked (পারফরম্যান্স) |
| জেনেরিক লাইব্রেরি কোড | checked (কলার ডिसাইড করুক) |
নোট
- ফ্লোটিং পয়েন্ট (
float,double) ওভারফ্লোInfinityদেয়, এক্সেপশন নয়। decimalসবসময় চেকড (ওভারফ্লোতে এক্সেপশন)।- প্রজেক্ট প্রপার্টিজ → Build → "Check for arithmetic overflow/underflow" দিয়ে গ্লোবাল সেটিং।