تمرين - تنفيذ معالجة استثناء محاولة التقاط

مكتمل

try-catch يتكون النمط من كتلة try متبوعة بجملة واحدة أو أكثرcatch. تحدد كل catch عبارة المعالج لنوع استثناء مختلف.

عند طرح استثناء، يبحث وقت تشغيل اللغة الشائعة (CLR) عن عبارة catch يمكنها معالجة الاستثناء. إذا كان الأسلوب المنفذ حاليا لا يحتوي على عبارة catch يمكنها معالجة نوع الاستثناء الذي تم طرحه، فإن CLR يبحث في الأسلوب الذي يسمى الأسلوب الحالي. يستمر البحث عبر مكدس الاستدعاءات حتى يتم العثور على عبارة مناسبة catch . إذا لم يتم العثور على عبارة catch لمعالجة الاستثناء، يعرض CLR رسالة استثناء غير معالج للمستخدم ويوقف تنفيذ البرنامج.

في هذا التمرين، ستقوم بتنفيذ نمط أساسي try-catch .

إنشاء مشروع تعليمة برمجية جديدة

خطوتك الأولى هي إنشاء مشروع تعليمة برمجية تستخدمه أثناء هذه الوحدة النمطية.

  1. افتح مثيلاً جديدًا من Visual Studio Code.

  2. في القائمة ملف ، حدد فتح مجلد.

  3. في مربع الحوار فتح مجلد ، انتقل إلى مجلد سطح مكتب Windows.

  4. في مربع الحوار فتح مجلد ، حدد مجلد جديد.

  5. قم بتسمية المجلد الجديد Exceptions101، ثم حدد Select Folder.

  6. في القائمة المحطة الطرفية، حدد محطة طرفية جديدة.

    ستستخدم أمر .NET CLI لإنشاء تطبيق وحدة تحكم جديد.

  7. في موجه أوامر لوحة TERMINAL، أدخل الأوامر التالية:

    dotnet new console
    
  8. أغلق لوحة TERMINAL.

تنفيذ تجربة بسيطة

  1. استخدم طريقة عرض Visual Studio Code EXPLORER لفتح ملف Program.cs.

  2. في القائمة عرض، حدد لوحة الأوامر.

  3. في موجه الأوامر، أدخل .net: g ثم حدد .NET: Generate Assets for Build and Debug.

  4. استبدل محتوى ملف Program.cs بالتعليمات البرمجية التالية:

    double float1 = 3000.0;
    double float2 = 0.0;
    int number1 = 3000;
    int number2 = 0;
    
    Console.WriteLine(float1 / float2);
    Console.WriteLine(number1 / number2);
    Console.WriteLine("Exit program");
    
  5. خذ دقيقة لفحص التعليمات البرمجية.

    لاحظ أن التطبيق يستخدم نوعين من المتغيرات الرقمية، double و int. تقوم التعليمات البرمجية بإجراء عملية حسابية للقسمة باستخدام كلا النوعين الرقميين.

    يستخدم double المطورون متغير نوع للحسابات عندما تكون القيم الكسرية الدقيقة مهمة.

  6. في قائمة Run ، حدد Start Debugging.

    لاحظ حدوث DivideByZeroException استثناء عند تقسيم قيم العدد الصحيح.

    إشعار

    ربما لاحظت أن المعادلة التي تستخدم متغيرات من النوع double قادرة على الإكمال دون التسبب في حدوث خطأ. يقوم حساب القسمة على صفر باستخدام double متغيرات النوع بإرجاع نتيجة مساوية للنهاية أو -اللانهاية أو "ليس رقما". لا يعني هذا أنه يجب عليك دائما استخدام double متغيرات النوع بدلا من int أو decimal الأنواع. النهج الصحيح هو استخدام متغيرات من النوع المناسب وتنفيذ معالجة الاستثناءات لالتقاط أي أخطاء قد تحدث.

  7. في شريط أدوات تتبع الأخطاء، حدد متابعة.

    لقطة شاشة تعرض الزر متابعة على شريط أدوات تتبع الأخطاء.

  8. خذ دقيقة لفحص إخراج الرسالة للتطبيق الخاص بك.

    ∞
    Unhandled exception. System.DivideByZeroException: Attempted to divide by zero.
       at Program.<Main>$(String[] args) in C:\Users\msuser\Desktop\Exceptions101\Program.cs:line 7
    

    لاحظ أن الاستثناء غير المعالج تسبب في إيقاف تشغيل التطبيق الخاص بك بعد اكتمال العبارة الأولى Console.WriteLine() .

    إشعار

    بشكل افتراضي، يستخدم Visual Studio Code نص لون مختلف لعرض الرسائل التي تم إنشاؤها بواسطة مصحح الأخطاء. يساعد هذا المطور على التمييز بين إخراج التطبيق ورسائل مصحح الأخطاء. إذا كنت تريد طريقة عرض أكثر نظافة لإخراج التطبيق الخاص بك، يمكنك تكوين ملف launch.json لاستخدام وحدة تحكم مختلفة. على سبيل المثال، قم بتعيين console إلى integratedTerminal لاستخدام لوحة TERMINAL لإخراج التطبيق. يتم عرض رسائل مصحح الأخطاء دائما في لوحة وحدة تحكم DEBUG.

  9. قم بإحاطة الحسابين داخل كتلة التعليمات البرمجية لبيان try كما يلي:

    double float1 = 3000.0;
    double float2 = 0.0;
    int number1 = 3000;
    int number2 = 0;
    
    try
    {
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    
    Console.WriteLine("Exit program");
    
  10. لاحظ الخط الأحمر المتعرج أسفل قوس الإغلاق للكتلة try .

    يتطلب بناء جملة C# عبارة catch أو finally عند استخدام عبارة try .

  11. إنشاء كتلة تعليمة برمجية catch أسفل كتلة التعليمات البرمجية try كما يلي:

    try
    {
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    catch
    {
        Console.WriteLine("An exception has been caught");
    }
    
  12. في قائمة ملف Visual Studio Code، حدد Save.

  13. في قائمة Run ، حدد Start Debugging.

  14. خذ دقيقة لفحص الإخراج الذي أنتجه التطبيق الخاص بك.

    ∞
    An exception has been caught
    Exit program
    
  15. لاحظ أنه على الرغم من أن الاستثناء لا يزال يحدث، فإن التطبيق الخاص بك قادر الآن على إنهاء تنفيذ أسطر التعليمات البرمجية المتبقية قبل الإغلاق.

    تمكنك معالجة الاستثناء من التحكم في تنفيذ التعليمات البرمجية عند حدوث استثناءات. تساعد معالجة الاستثناء على التأكد من أن التعليمات البرمجية الخاصة بك مستقرة وتنتج النتائج المتوقعة.

التقاط الاستثناءات التي تم طرحها في أساليب تسمى

في كثير من الحالات، يتم اكتشاف استثناء على مستوى مكدس الاستدعاءات أقل من المستوى الذي تم طرحه فيه.

عند طرح استثناء ولا يلتقط الأسلوب الحالي الاستثناء، سيقوم وقت تشغيل اللغة الشائعة بفك المكدس، بحثا عن أسلوب يحتوي على catch عبارة يمكنها معالجة الاستثناء. سيتم تنفيذ العبارة الأولى catch التي تم العثور عليها والتي يمكنها التعامل مع الاستثناء. إذا لم يتم العثور على عبارة مناسبة catch في أي مكان في مكدس الاستدعاءات، فسينهي وقت تشغيل اللغة الشائعة العملية ويعرض رسالة خطأ للمستخدم.

  1. استبدل التعليمات البرمجية في ملف Program.cs بالتعليمات البرمجية التالية:

    try
    {
        Process1();
    }
    catch
    {
        Console.WriteLine("An exception has occurred");
    }
    
    Console.WriteLine("Exit program");
    
    static void Process1()
    {
        WriteMessage();
    }
    
    static void WriteMessage()
    {
        double float1 = 3000.0;
        double float2 = 0.0;
        int number1 = 3000;
        int number2 = 0;
    
        Console.WriteLine(float1 / float2);
        Console.WriteLine(number1 / number2);
    }
    
  2. خذ دقيقة لمراجعة التعليمات البرمجية المحدثة.

    • تتضمن عبارات المستوى الأعلى كتلة التعليمات البرمجية tryProcess1() التي تستدعي الأسلوب .
    • Process1() يستدعي WriteMessage() الأسلوب الأسلوب .
    • WriteMessage() يحتوي الأسلوب على التعليمات البرمجية حيث سيتم طرح الاستثناءDivideByZeroException.

    لاحظ أنه سيتم إنشاء الاستثناء في أسلوب يكون مستويين من مكدس الاستدعاءات أعلى كتل التعليمات البرمجية try و catch .

    لقطة شاشة تعرض مستويات مكدس الاستدعاءات بين مكان طرح استثناء ومكان اكتشافه.

    يتم تمثيل عبارات المستوى الأعلى كأسلوب مسمى Main في مكدس الاستدعاءات.

  3. في قائمة ملف Visual Studio Code، حدد Save.

  4. في قائمة Run ، حدد Start Debugging.

  5. خذ دقيقة لفحص الإخراج الذي أنتجه التطبيق الخاص بك.

    ∞
    An exception has occurred
    Exit program
    
  6. لاحظ أنه على الرغم من طرح الاستثناء مستويين لأعلى في مكدس الاستدعاءات، فإنه لا يزال يتم التعامل معه بنجاح.

خلاصة

فيما يلي بعض الأشياء المهمة التي يجب تذكرها من هذه الوحدة:

  • تنفيذ نمط try-catch لخطوط try التعليمات البرمجية المحددة داخل التطبيق الخاص بك والاستثناءات catch التي تحدث ضمن نطاق كتلة التعليمات البرمجية try .
  • استخدم عبارة catch لالتقاط استثناء تم طرحه في نفس مستوى مكدس الاستدعاءات.
  • استخدم عبارة catch لالتقاط استثناء تم طرحه على مستوى أعلى من مكدس الاستدعاءات.