دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
RIGHT JOIN در پایگاه داده SQL
1403/12/01 -
LEFT JOIN در پایگاه داده sql
1403/11/28 -
کلمات کلیدی checked و unchecked در سی شارپ
1403/11/26 -
Type Casting در سی شارپ
1403/11/24
کلمات کلیدی checked و unchecked در سی شارپ

کلمات کلیدی checked و unchecked در سیشارپ
در سیشارپ، کلمات کلیدی checked و unchecked برای کنترل سرریز اعداد صحیح (integer overflow) در محاسبات عددی استفاده میشوند.
سرریز زمانی رخ میدهد که مقدار عددی از محدودهای که نوع داده میتواند نگه دارد، فراتر رود.
بهطور پیشفرض، سیشارپ این سرریزها را نادیده میگیرد و مقدار خروجی به مقدار غیرمنتظرهای تبدیل میشود.
اما با استفاده از checked، میتوان اطمینان حاصل کرد که هنگام سرریز، یک استثنا (OverflowException) ایجاد شود تا از بروز خطاهای محاسباتی جلوگیری شود.
این ویژگی بهویژه در برنامههای مالی و حساس که دقت محاسبات اهمیت دارد، مفید است.
در مقابل، کلمه کلیدی unchecked باعث میشود که عملیات حسابی بدون بررسی سرریز اجرا شود و در نتیجه، عملکرد بهتری داشته باشد.
این حالت زمانی مفید است که برنامهنویس اطمینان دارد که سرریز تأثیری بر منطق برنامه ندارد، مانند محاسبات پردازش تصویر یا برخی از الگوریتمهای رمزنگاری.
همچنین، unchecked بهطور پیشفرض در سیشارپ فعال است، مگر اینکه checked بهطور صریح استفاده شود یا تنظیمات پروژه برای بررسی سرریز تغییر کند.
انتخاب بین checked و unchecked به نوع کاربرد و میزان حساسیت محاسبات در برنامه بستگی دارد.
مفهوم سرریز عددی (Integer Overflow)
سرریز عددی زمانی اتفاق میافتد که مقدار عددی از محدودهی نوع دادهای که برای آن تعیین شده فراتر رود.
مثال سرریز عددی در int
int maxValue = int.MaxValue;
int result = maxValue + 1; // سرریز اتفاق میافتد
Console.WriteLine(result); // مقدار نادرست نمایش داده میشود
در این مثال، مقدار int.MaxValue برابر 2,147,483,647 است.
وقتی 1 به این مقدار اضافه شود، نتیجه به مقدار منفی -2,147,483,648 تبدیل خواهد شد (به دلیل نحوه نمایش اعداد در سیستم دودویی).
این رفتار در سیشارپ بدون هیچ خطایی انجام میشود مگر اینکه از checked استفاده کنیم.
آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
شرکت در دوره آموزش برنامه نویسی سی شارپ
استفاده از checked در سی شارپ
کلمه کلیدی checked در سیشارپ باعث میشود که در صورت وقوع سرریز، برنامه یک استثنا (Exception) ایجاد کند.
این ویژگی مخصوصاً در مواقعی مفید است که بخواهیم از تولید مقادیر نامعتبر جلوگیری کنیم.
ساختار کلی checked
checked {
// کدهایی که باید در حالت بررسی سرریز اجرا شوند
}
یا
int result = checked(a + b);
مثال استفاده از checked
int maxValue = int.MaxValue;
try {
int result = checked(maxValue + 1); // خطا رخ میدهد
Console.WriteLine(result);
} catch (OverflowException ex) {
Console.WriteLine("خطای سرریز عدد صحیح: " + ex.Message);
}
نتیجه
خطای سرریز عدد صحیح: Arithmetic operation resulted in an overflow.
در اینجا، checked باعث میشود که برنامه در صورت سرریز، یک استثنا از نوع OverflowException پرتاب کند.
مزایای checked و unchecked در پروژههای واقعی
-
مزایای checked
-
جلوگیری از خطاهای محاسباتی
هنگام وقوع سرریز عددی، برنامه با پرتاب استثنا (OverflowException) از تولید دادههای نادرست جلوگیری میکند. -
افزایش امنیت دادهها
در برنامههای مالی، حسابداری و بانکی از مقادیر اشتباه جلوگیری میکند و دقت محاسبات را بالا میبرد. -
کمک به اشکالزدایی (Debugging)
با شناسایی سریع سرریزهای عددی، فرآیند دیباگ آسانتر شده و مشکلات محاسباتی راحتتر برطرف میشوند. -
افزایش قابلیت اطمینان
در پروژههای حساس مانند شبیهسازیهای علمی و پردازش دادههای آماری که نیاز به دقت بالا دارند، استفاده از checked ضروری است.
-
-
مزایای unchecked
-
بهبود عملکرد و سرعت پردازش
از بررسیهای اضافه جلوگیری کرده و عملیات حسابی را سریعتر اجرا میکند، مخصوصاً در پردازش دادههای حجیم و بازیهای رایانهای. -
مدیریت انعطافپذیر سرریزها
در مواردی که سرریز عددی تأثیر مهمی ندارد، اجازه میدهد مقادیر بدون بررسی مدیریت شوند، مانند پردازش تصویر و الگوریتمهای رمزنگاری. -
کاهش مصرف منابع پردازشی
در برنامههای سیستمهای نهفته (Embedded Systems) که منابع محدودی دارند، unchecked باعث بهینهسازی مصرف حافظه و پردازنده میشود.
-
استفاده از checked و unchecked باید بر اساس نیاز پروژه تعیین شود؛ در محاسبات حساس از checked و در عملیات پردازشی سنگین از unchecked استفاده میشود.
استفاده از unchecked در سی شارپ
در مقابل، unchecked باعث میشود که سرریز بدون خطا رخ دهد و مقدار خروجی به صورت پیشفرض توسط سختافزار تعیین شود.
ساختار کلی unchecked
unchecked {
// عملیات عددی که نیاز به بررسی سرریز ندارند
}
یا
int result = unchecked(a + b);
مثال استفاده از unchecked
int maxValue = int.MaxValue;
int result = unchecked(maxValue + 1); // سرریز رخ میدهد اما خطا ایجاد نمیشود
Console.WriteLine(result);
نتیجه
در این مثال، سیشارپ بدون ایجاد استثنا، مقدار اشتباه را نمایش میدهد.
مثال ترکیبی checked و unchecked
int maxValue = int.MaxValue;
int safeResult;
int unsafeResult;
// استفاده از checked برای جلوگیری از سرریز
try {
safeResult = checked(maxValue + 1);
} catch (OverflowException) {
safeResult = 0; // مقدار پیشفرض در صورت خطا
}
// استفاده از unchecked برای بهبود عملکرد
unsafeResult = unchecked(maxValue + 1);
Console.WriteLine($"Checked Result: {safeResult}");
Console.WriteLine($"Unchecked Result: {unsafeResult}");
نتیجه
Checked Result: 0
Unchecked Result: -2147483648
در اینجا، مقدار safeResult در اثر سرریز برابر ۰ شده و مقدار unsafeResult مقدار اشتباهی را بدون خطا تولید کرده است.
تنظیمات پیشفرض در پروژههای سیشارپ
در پروژههای کنسولی و دسکتاپ سیشارپ، حالت پیشفرض برای عملیات حسابی unchecked است، به این معنا که سرریزها بررسی نمیشوند.
اما شما میتوانید تنظیمات پیشفرض را تغییر دهید.
فعال کردن بررسی سرریز در کل پروژه
اگر میخواهید که کل پروژه از checked بهطور پیشفرض استفاده کند، میتوانید گزینه Check for arithmetic overflow/underflow را در تنظیمات پروژه فعال کنید:
در Visual Studio، به مسیر Project > Properties بروید.
در تب Build، گزینه Check for arithmetic overflow/underflow را فعال کنید.
کاربردهای checked و unchecked در پروژههای واقعی
-
برنامههای مالی
در محاسبات حساس مانند پرداختهای مالی، محاسبه سود و زیان، و مدیریت حقوق و دستمزد، استفاده از checked ضروری است تا از خطاهای عددی جلوگیری شود.
مثال
decimal salary = 10000m;
decimal bonus = decimal.MaxValue;
try {
decimal total = checked(salary + bonus);
Console.WriteLine($"Total Salary: {total}");
} catch (OverflowException) {
Console.WriteLine("خطای سرریز در محاسبات حقوق و دستمزد!");
}
-
پردازش تصاویر و دادههای دیجیتال
در پردازش تصاویر، صوت و ویدئو، ممکن است مقادیر عددی پیکسلها یا سیگنالها سرریز شوند. در این موارد، unchecked میتواند عملکرد را بهبود دهد.
مثال
byte pixelValue = 250;
byte newPixelValue = unchecked((byte)(pixelValue + 10)); // سرریز بدون خطا
Console.WriteLine(newPixelValue); // مقدار اشتباه اما بدون خطا
مثال پروژه محور از کلمات کلیدی checked و unchecked در سی شارپ
پروژه کوتاه: مدیریت حساب بانکی با checked و unchecked
این پروژه یک سیستم ساده مدیریت حساب بانکی را پیادهسازی میکند که در آن، هنگام واریز یا برداشت وجه، بررسی میشود که سرریز عددی رخ ندهد.
کد پروژه در سیشارپ
using System;
class BankAccount
{
public int Balance { get; private set; }
public BankAccount(int initialBalance)
{
Balance = initialBalance;
}
public void Deposit(int amount)
{
try
{
Balance = checked(Balance + amount); // بررسی سرریز هنگام واریز
Console.WriteLine($"موجودی جدید پس از واریز: {Balance}");
}
catch (OverflowException)
{
Console.WriteLine("خطا: مقدار واریزی باعث سرریز عددی شد!");
}
}
public void Withdraw(int amount)
{
try
{
Balance = checked(Balance - amount); // بررسی سرریز هنگام برداشت
Console.WriteLine($"موجودی جدید پس از برداشت: {Balance}");
}
catch (OverflowException)
{
Console.WriteLine("خطا: مقدار برداشت بیش از حد مجاز است!");
}
}
}
class Program
{
static void Main()
{
BankAccount account = new BankAccount(2_000_000_000); // مقدار اولیه نزدیک به حداکثر int
account.Deposit(1_000_000_000); // ممکن است سرریز رخ دهد
account.Withdraw(500_000_000); // برداشت ایمن
}
}
توضیح پروژه
کلاس BankAccount:
دارای ویژگی Balance برای نگهداری موجودی حساب است.
متد Deposit برای واریز وجه، که در آن از checked استفاده شده تا در صورت سرریز، برنامه استثنا ایجاد کند.
متد Withdraw برای برداشت وجه، که از checked برای جلوگیری از کاهش بیش از حد مقدار عددی استفاده میکند.
کلاس Program:
یک حساب بانکی با مقدار اولیه ۲ میلیارد تومان ایجاد میکند.
یک واریز بزرگ انجام میدهد که ممکن است باعث سرریز شود و خطا ایجاد کند.
سپس یک برداشت انجام میدهد که در محدوده مجاز است.
دوره های مرتبط

آموزش برنامه نویسی سی شارپ
زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.