دسته بندی مقالات
- بیشتر -محصولات
- بیشتر -آخرین مقالات
- بیشتر --
مفهوم sql server instance
1404/08/13 -
آموزش فعال سازی Tlsدر Sql Server
1404/08/12 -
کنترل Message Queuing در سی شارپ
1404/08/11 -
نرم افزار ssms چیست؟
1404/08/10 -
کنترل linkLabel در سی شارپ
1404/08/09
مدیریت خطا در سی شارپ
مدیریت خطا در سی شارپ
مدیریت خطا (Exception Handling) یکی از بخشهای مهم در هر زبان برنامهنویسی است و سی شارپ (C#) نیز ابزارهای قدرتمندی برای این کار ارائه میدهد.
خطاها در برنامههای کامپیوتری به دلایل مختلفی رخ میدهند، از جمله خطاهای منطقی، ورودیهای نادرست، مشکلات سیستم و یا منابع خارج از کنترل برنامه.
مدیریت خطا به فرآیندی گفته میشود که برنامه بتواند از وقوع خطاهای غیرمنتظره جلوگیری کرده و یا در صورت رخداد آنها، رفتار مناسبی از خود نشان دهد.
در ادامه، به توضیح مفاهیم مدیریت خطا، استفاده از بلوک finally و ایجاد استثناء (Exception) در سی شارپ میپردازیم.
ساختار کلی مدیریت خطا
سی شارپ از ساختارهای زیر برای مدیریت خطا استفاده میکند:
-
try
کدی که احتمال دارد خطایی در آن رخ دهد، در این بلوک قرار میگیرد. -
catch
خطاها در این بلوک پردازش میشوند. -
finally
این بلوک برای اجرای کدهایی استفاده میشود که باید در هر صورت (چه خطا رخ دهد و چه ندهد) اجرا شوند.
بلوک finally در سی شارپ
بلوک finally بخشی از ساختار مدیریت خطا است که همیشه اجرا میشود، صرفنظر از اینکه خطا رخ دهد یا خیر.
این بلوک برای پاکسازی منابع (مانند فایلها، اتصالات به پایگاه داده و غیره) استفاده میشود.
-
ساختار بلوک finally
try
{
// کد حساس به خطا
}
catch (Exception ex)
{
// مدیریت خطا
}
finally
{
// کدهایی که همیشه باید اجرا شوند
}
ویژگیهای بلوک finally
- بلوک finally اختیاری است و میتواند به همراه try-catch یا فقط با try استفاده شود.
- کدهای داخل finally حتی در صورت وجود return در بلوک try یا catch اجرا میشوند.
نمونه کد استفاده از finally
using System;
using System.IO;
class Program
{
static void Main()
{
FileStream file = null;
try
{
file = new FileStream("example.txt", FileMode.Open);
Console.WriteLine("فایل باز شد.");
// عملیات روی فایل
}
catch (FileNotFoundException ex)
{
Console.WriteLine($"خطا: {ex.Message}");
}
finally
{
if (file != null)
{
file.Close();
Console.WriteLine("فایل بسته شد.");
}
}
}
}
توضیح مثال:
اگر فایل وجود نداشته باشد، خطای FileNotFoundException مدیریت میشود.
در هر صورت (چه خطا رخ دهد و چه ندهد)، فایل در بلوک finally بسته میشود.
🌟 آیا به دنبال یک فرصت عالی برای یادگیری برنامهنویسی هستید؟ 🚀
با دوره آموزشی سیشارپ ما، شما میتوانید مهارتهای خود را به سطح جدیدی ارتقا دهید! این دوره بهطور کامل طراحی شده تا به شما کمک کند تا از مبتدی تا پیشرفته در دنیای برنامهنویسی سیشارپ پیش بروید.
👨🏫 چرا دوره ما را انتخاب کنید؟
- محتوای جامع و عملی: با پروژههای واقعی و تمرینات عملی، یادگیری را به تجربهای جذاب تبدیل کنید.
- مدرس مجرب: از تجربه و دانش مدرس حرفهای بهرهمند شوید که شما را در هر مرحله از یادگیری راهنمایی میکنند.
- پشتیبانی ۲۴/۷: هر زمان که سوالی داشتید، ما در کنار شما خواهیم بود تا به شما کمک کنیم.
- دسترسی مادامالعمر: به محتوای دوره دسترسی دائمی داشته باشید و هر زمان که خواستید، میتوانید به آن مراجعه کنید.
💡 فرصت را از دست ندهید!
بایادگیری سیشارپ، میتوانید در دنیای فناوری اطلاعات به یک متخصص تبدیل شوید و در پروژههای جذاب و چالشبرانگیز شرکت کنید.
همین امروز به جمع یادگیرندگان ما بپیوندید و اولین قدم را به سوی آیندهای روشنتر بردارید!
نکات مهم درباره بلوک finally
-
ضرورت استفاده
استفاده از بلوک finally برای آزادسازی منابعی که در بلوک try استفاده شدهاند، ضروری است. این امر به جلوگیری از نشت منابع کمک میکند. -
عدم جایگزینی با catch
بلوک finally جایگزین بلوک catch نیست. finally برای انجام عملیات نهایی است، نه مدیریت خطا. -
رفتار در خطاهای بحرانی
اگر خطای بحرانی (مانند StackOverflowException) رخ دهد که کل فرآیند برنامه متوقف شود، بلوک finally ممکن است اجرا نشود.
ایجاد استثناء و انواع آن در سی شارپ
گاهی اوقات لازم است خطاها بهصورت دستی و متناسب با شرایط خاص برنامه ایجاد شوند.
سی شارپ این امکان را با استفاده از کلمه کلیدی throw فراهم میکند.
-
سیستم تعریف شده
خطاهایی که توسط چارچوب داتنت تعریف شدهاند، مانند:
-
NullReferenceException
-
ArgumentException
-
DivideByZeroException
-
-
تعریف شده توسط کاربر
خطاهایی که توسط برنامهنویس برای شرایط خاص تعریف میشوند.
"با دورههای تخصصی سی شارپ ما، مهارتهایی کسب کنید که شما را به یک برنامهنویس حرفهای و مورد تقاضا در بازار تبدیل میکند!"
برای آموزش کامل و جامع مدیریت خطا در سی شارپ از اینجا وارد بخش دوره آموزشی ما شوید
ساختار throw
در سیشارپ، کلمه کلیدی throw برای پرتاب استثناها (Exceptions) استفاده میشود، که نشاندهنده یک خطای زمان اجرا یا وضعیت غیرمنتظره در برنامه است.
این ساختار معمولاً همراه با یک شیء از نوع کلاس Exception یا زیرکلاسهای آن به کار میرود. برای تعریف یا بازپرتاب یک استثنا، از throw استفاده میکنیم.
همچنین، میتوان در یک بلوک catch از throw; بدون پارامتر برای بازپرتاب استثنای اصلی استفاده کرد، که باعث حفظ اطلاعات خطا و ردیابی (stack trace) میشود.
این قابلیت برای مدیریت بهتر خطا در لایههای مختلف برنامه مفید است.
کلمه کلیدی throw برای ایجاد و پرتاب خطا استفاده میشود:
throw new Exception("پیغام خطا");
نمونه کد ایجاد استثناء
using System;
class Program
{
static void CheckNumber(int number)
{
if (number < 0)
{
throw new ArgumentException("عدد نمیتواند منفی باشد.");
}
Console.WriteLine($"عدد وارد شده: {number}");
}
static void Main()
{
try
{
CheckNumber(-5);
}
catch (ArgumentException ex)
{
Console.WriteLine($"خطا: {ex.Message}");
}
}
}
توضیح مثال:
اگر عدد منفی باشد، یک ArgumentException ایجاد و پرتاب میشود.
خطا در بلوک catch پردازش میشود.
ساختار تعریف استثناء سفارشی
-
تعریف یک استثناء سفارشی
سی شارپ امکان تعریف کلاسهای سفارشی برای خطاها را فراهم میکند
این قابلیت برای ایجاد خطاهای خاص یک برنامه کاربردی است.
یک کلاس جدید تعریف کنید که از کلاس پایه Exception ارثبری کند.
سازندهها (constructors) را برای تنظیم پیامهای خطا پیادهسازی کنید.
-
نمونه کد استثناء سفارشی
using System;
class CustomException : Exception
{
public CustomException(string message) : base(message) { }
}
class Program
{
static void ValidateAge(int age)
{
if (age < 18)
{
throw new CustomException("سن باید حداقل ۱۸ سال باشد.");
}
Console.WriteLine("ثبت نام با موفقیت انجام شد.");
}
static void Main()
{
try
{
ValidateAge(15);
}
catch (CustomException ex)
{
Console.WriteLine($"خطای سفارشی: {ex.Message}");
}
}
}
توضیح مثال:
یک کلاس استثناء به نام CustomException تعریف شده است.
از این استثناء برای بررسی سن کاربران استفاده میشود.
نکات مهم در ایجاد استثناء
-
پرتاب مجدد استثناء
اگر بخواهید استثناء را در لایههای بالاتر مدیریت کنید، میتوانید از دستور throw در بلوک catch استفاده کنید.
catch (Exception ex)
{
throw; // پرتاب مجدد استثناء
}
-
انتخاب مناسب نوع استثناء
از استثناءهای پیشفرض مانند ArgumentException یا InvalidOperationException استفاده کنید، مگر اینکه نیاز خاصی داشته باشید.
پیامهای استثناء باید به گونهای باشد که به برنامهنویس یا کاربر کمک کند دلیل خطا را درک کند.
مثال پروژه محور بررسی و خواندن فایل با مدیریت خطا
این برنامه مسیری از کاربر دریافت میکند، وجود فایل را بررسی کرده و محتوا را میخواند. خطاها مدیریت میشوند و منابع آزاد میگردند.
using System;
using System.IO;
class Program
{
static void Main()
{
Console.Write("مسیر فایل را وارد کنید: ");
string filePath = Console.ReadLine();
FileStream fileStream = null;
try
{
if (!File.Exists(filePath))
throw new FileNotFoundException("فایل پیدا نشد.");
fileStream = new FileStream(filePath, FileMode.Open);
using (StreamReader reader = new StreamReader(fileStream))
{
fileStream = null; // مدیریت StreamReader
Console.WriteLine("محتوای فایل:");
Console.WriteLine(reader.ReadToEnd());
}
}
catch (FileNotFoundException ex)
{
Console.WriteLine($"خطا: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"خطای دیگر: {ex.Message}");
}
finally
{
if (fileStream != null)
{
fileStream.Close();
Console.WriteLine("منابع آزاد شد.");
}
}
}
}
نحوه عملکرد:
مسیر فایل را وارد کنید.
خطاهایی مانند عدم وجود فایل مدیریت میشوند.
محتوا نمایش داده و منابع آزاد میشود.
دوره های مرتبط
آموزش برنامه نویسی سی شارپ
زبان شی گرایی حرفه ای سی شارپ یک زبان قدرتمند برای طراحی نرم افزار به شمار میرود.










