"

مدیریت خطا در سی شارپ

تیم تحریریه 1403/09/07 0 347
لینک کوتاه https://zoheirsoftware.com/z/504eb3e59 |
مدیریت خطا در سی شارپ ,بلوک finally در سی شارپ,ایجاد استثناء  و انواع آن در سی شارپ

مدیریت خطا در سی شارپ 

مدیریت خطا (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 ممکن است اجرا نشود.

 

نکات مهم درباره بلوک 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("منابع آزاد شد.");
            }
        }
    }
}



نحوه عملکرد:

مسیر فایل را وارد کنید.
خطاهایی مانند عدم وجود فایل مدیریت می‌شوند.
محتوا نمایش داده و منابع آزاد می‌شود.

 

 

 

 

 

دوره های مرتبط
آموزش برنامه نویسی سی شارپ,آموزش پروژه محور سی شارپ,آموزش مقدماتی تا پیشرفته سی شارپ,طراحی نرم افزار تحت ویندوز

آموزش برنامه نویسی سی شارپ

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

999,000 تومان

3.4k بازدید

ارسال دیدگاه

برای ارسال نظر لطفا ورود یا ثبت نام کنید.