تمرين - تنفيذ معالجة استثناء محاولة التقاط
try-catch يتكون النمط من كتلة try متبوعة بجملة واحدة أو أكثرcatch. تحدد كل catch عبارة المعالج لنوع استثناء مختلف.
عند طرح استثناء، يبحث وقت تشغيل اللغة الشائعة (CLR) عن عبارة catch يمكنها معالجة الاستثناء. إذا كان الأسلوب المنفذ حاليا لا يحتوي على عبارة catch يمكنها معالجة نوع الاستثناء الذي تم طرحه، فإن CLR يبحث في الأسلوب الذي يسمى الأسلوب الحالي. يستمر البحث عبر مكدس الاستدعاءات حتى يتم العثور على عبارة مناسبة catch . إذا لم يتم العثور على عبارة catch لمعالجة الاستثناء، يعرض CLR رسالة استثناء غير معالج للمستخدم ويوقف تنفيذ البرنامج.
في هذا التمرين، ستقوم بتنفيذ نمط أساسي try-catch .
إنشاء مشروع تعليمة برمجية جديدة
خطوتك الأولى هي إنشاء مشروع تعليمة برمجية تستخدمه أثناء هذه الوحدة النمطية.
افتح مثيلاً جديدًا من Visual Studio Code.
في القائمة ملف ، حدد فتح مجلد.
في مربع الحوار فتح مجلد ، انتقل إلى مجلد سطح مكتب Windows.
في مربع الحوار فتح مجلد ، حدد مجلد جديد.
قم بتسمية المجلد الجديد Exceptions101، ثم حدد Select Folder.
في القائمة المحطة الطرفية، حدد محطة طرفية جديدة.
ستستخدم أمر .NET CLI لإنشاء تطبيق وحدة تحكم جديد.
في موجه أوامر لوحة TERMINAL، أدخل الأوامر التالية:
dotnet new consoleأغلق لوحة TERMINAL.
تنفيذ تجربة بسيطة
استخدم طريقة عرض Visual Studio Code EXPLORER لفتح ملف Program.cs.
في القائمة عرض، حدد لوحة الأوامر.
في موجه الأوامر، أدخل .net: g ثم حدد .NET: Generate Assets for Build and Debug.
استبدل محتوى ملف 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");خذ دقيقة لفحص التعليمات البرمجية.
لاحظ أن التطبيق يستخدم نوعين من المتغيرات الرقمية،
doubleوint. تقوم التعليمات البرمجية بإجراء عملية حسابية للقسمة باستخدام كلا النوعين الرقميين.يستخدم
doubleالمطورون متغير نوع للحسابات عندما تكون القيم الكسرية الدقيقة مهمة.في قائمة Run ، حدد Start Debugging.
لاحظ حدوث
DivideByZeroExceptionاستثناء عند تقسيم قيم العدد الصحيح.إشعار
ربما لاحظت أن المعادلة التي تستخدم متغيرات من النوع
doubleقادرة على الإكمال دون التسبب في حدوث خطأ. يقوم حساب القسمة على صفر باستخدامdoubleمتغيرات النوع بإرجاع نتيجة مساوية للنهاية أو -اللانهاية أو "ليس رقما". لا يعني هذا أنه يجب عليك دائما استخدامdoubleمتغيرات النوع بدلا منintأوdecimalالأنواع. النهج الصحيح هو استخدام متغيرات من النوع المناسب وتنفيذ معالجة الاستثناءات لالتقاط أي أخطاء قد تحدث.في شريط أدوات تتبع الأخطاء، حدد متابعة.
خذ دقيقة لفحص إخراج الرسالة للتطبيق الخاص بك.
∞ 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.قم بإحاطة الحسابين داخل كتلة التعليمات البرمجية لبيان
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");لاحظ الخط الأحمر المتعرج أسفل قوس الإغلاق للكتلة
try.يتطلب بناء جملة C# عبارة
catchأوfinallyعند استخدام عبارةtry.إنشاء كتلة تعليمة برمجية
catchأسفل كتلة التعليمات البرمجيةtryكما يلي:try { Console.WriteLine(float1 / float2); Console.WriteLine(number1 / number2); } catch { Console.WriteLine("An exception has been caught"); }في قائمة ملف Visual Studio Code، حدد Save.
في قائمة Run ، حدد Start Debugging.
خذ دقيقة لفحص الإخراج الذي أنتجه التطبيق الخاص بك.
∞ An exception has been caught Exit programلاحظ أنه على الرغم من أن الاستثناء لا يزال يحدث، فإن التطبيق الخاص بك قادر الآن على إنهاء تنفيذ أسطر التعليمات البرمجية المتبقية قبل الإغلاق.
تمكنك معالجة الاستثناء من التحكم في تنفيذ التعليمات البرمجية عند حدوث استثناءات. تساعد معالجة الاستثناء على التأكد من أن التعليمات البرمجية الخاصة بك مستقرة وتنتج النتائج المتوقعة.
التقاط الاستثناءات التي تم طرحها في أساليب تسمى
في كثير من الحالات، يتم اكتشاف استثناء على مستوى مكدس الاستدعاءات أقل من المستوى الذي تم طرحه فيه.
عند طرح استثناء ولا يلتقط الأسلوب الحالي الاستثناء، سيقوم وقت تشغيل اللغة الشائعة بفك المكدس، بحثا عن أسلوب يحتوي على catch عبارة يمكنها معالجة الاستثناء. سيتم تنفيذ العبارة الأولى catch التي تم العثور عليها والتي يمكنها التعامل مع الاستثناء. إذا لم يتم العثور على عبارة مناسبة catch في أي مكان في مكدس الاستدعاءات، فسينهي وقت تشغيل اللغة الشائعة العملية ويعرض رسالة خطأ للمستخدم.
استبدل التعليمات البرمجية في ملف 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); }خذ دقيقة لمراجعة التعليمات البرمجية المحدثة.
- تتضمن عبارات المستوى الأعلى كتلة التعليمات البرمجية
tryProcess1()التي تستدعي الأسلوب . -
Process1()يستدعيWriteMessage()الأسلوب الأسلوب . -
WriteMessage()يحتوي الأسلوب على التعليمات البرمجية حيث سيتم طرح الاستثناءDivideByZeroException.
لاحظ أنه سيتم إنشاء الاستثناء في أسلوب يكون مستويين من مكدس الاستدعاءات أعلى كتل التعليمات البرمجية
tryوcatch.
يتم تمثيل عبارات المستوى الأعلى كأسلوب مسمى
Mainفي مكدس الاستدعاءات.- تتضمن عبارات المستوى الأعلى كتلة التعليمات البرمجية
في قائمة ملف Visual Studio Code، حدد Save.
في قائمة Run ، حدد Start Debugging.
خذ دقيقة لفحص الإخراج الذي أنتجه التطبيق الخاص بك.
∞ An exception has occurred Exit programلاحظ أنه على الرغم من طرح الاستثناء مستويين لأعلى في مكدس الاستدعاءات، فإنه لا يزال يتم التعامل معه بنجاح.
خلاصة
فيما يلي بعض الأشياء المهمة التي يجب تذكرها من هذه الوحدة:
- تنفيذ نمط
try-catchلخطوطtryالتعليمات البرمجية المحددة داخل التطبيق الخاص بك والاستثناءاتcatchالتي تحدث ضمن نطاق كتلة التعليمات البرمجيةtry. - استخدم عبارة
catchلالتقاط استثناء تم طرحه في نفس مستوى مكدس الاستدعاءات. - استخدم عبارة
catchلالتقاط استثناء تم طرحه على مستوى أعلى من مكدس الاستدعاءات.