فصل 24 از 40 درس 1 از 1

مدیریت Exception

مدیریت Exception

بخشی از آموزش جامع C# و .NET 10

محتوای درس مدیریت Exception

Exception مکانیزم گزارش خطاهای غیرعادی در زمان اجراست. مدیریت صحیح آن باید خطا را در سطح مناسب ثبت یا تبدیل کند و از پنهان کردن مشکل جلوگیری کند.

۱. try و catch

کد مستعد Exception در try قرار می‌گیرد و catch فقط Exceptionهایی را که امکان مدیریت معنادار دارند دریافت می‌کند.

مثال

try{int.Parse("x");}catch(FormatException ex){Console.WriteLine(ex.Message);}

در این مثال، مفهوم «try و catch» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۲. finally

finally برای Cleanupی که باید مستقل از موفقیت یا شکست انجام شود کاربرد دارد، هرچند using بسیاری از سناریوهای Resource Cleanup را ساده‌تر می‌کند.

مثال

try{Console.WriteLine("work");}finally{Console.WriteLine("cleanup");}

در این مثال، مفهوم «finally» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۳. throw

throw برای ایجاد یا بازپرتاب Exception استفاده می‌شود. هنگام بازپرتاب بهتر است Stack Trace حفظ شود.

مثال

static void Check(int age){if(age<0) throw new ArgumentOutOfRangeException(nameof(age));}

در این مثال، مفهوم «throw» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۴. Exceptionهای اختصاصی

برای خطاهای دامنه‌ای خاص می‌توان Custom Exception تعریف کرد، اما نباید برای هر وضعیت ساده Class جدید ساخت.

مثال

class ProductNotFoundException:Exception{public ProductNotFoundException(string m):base(m){}}

در این مثال، مفهوم «Exceptionهای اختصاصی» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۵. Exception در برابر Validation

داده نامعتبر قابل پیش‌بینی معمولاً با Validation مدیریت می‌شود؛ Exception برای وضعیت‌های استثنایی مناسب است.

مثال

if(int.TryParse("42",out int n)) Console.WriteLine(n);

در این مثال، مفهوم «Exception در برابر Validation» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۶. مثال‌های عملی

try
         {
             int value = int.Parse(input);
             Console.WriteLine(value);
         }
         catch (FormatException ex)
         {
             Console.WriteLine($"Invalid format: {ex.Message}");
         }

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

if (amount <= 0)
         {
             throw new ArgumentOutOfRangeException(nameof(amount));
         }

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

۷. خطاهای رایج

• catch (Exception) و نادیده گرفتن خطا

• استفاده از Exception برای کنترل جریان عادی

• throw ex به‌جای throw هنگام بازپرتاب

۸. نکات اجرایی

• نام‌ها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.

• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.

• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.

۹. تمرین عملی

متدی برای برداشت از حساب بنویسید که ورودی نامعتبر را با ArgumentOutOfRangeException و کسری موجودی را با Exception دامنه‌ای مدیریت کند.

۱۰. جمع‌بندی

در این فصل، مبانی «مدیریت Exception» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصل‌های بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم می‌کند.