معالجة الاستثناءات في VB.Net: أمثلة على التعامل مع المحاولة والالتقاط
ما هو الاستثناء في VB.Net؟
An استثناء في VB.Net يشير المصطلح إلى مشكلة تنشأ أثناء تنفيذ البرنامج. ويحدث ذلك نتيجة لظروف غير متوقعة. ومن الأمثلة الجيدة على ذلك عندما تقوم بإجراء عملية قسمة، ثم تقوم بالقسمة على الصفر (0). سيتم رفع استثناء.
ما هو التعامل مع الاستثناءات في VB.Net؟
مع الاستثناءات في VB.Netيمكنك نقل التحكم في البرنامج من جزء إلى آخر. في VB.Net، تتم معالجة الاستثناءات باستخدام الكلمات الأساسية الأربع التالية:
البحث عن كلمة | التفاصيل |
---|---|
جرّب | يتمثل عمل كتلة المحاولة في تحديد كتلة التعليمات البرمجية التي سيتم تنشيط استثناء محدد لها. يجب أن يتبعها كتلة (مجموعات) التقاط. |
يو كاتش | يتم التقاط الاستثناء في هذه الكتلة. وهو معالج الاستثناء الذي يتم فيه معالجة الاستثناء. |
أخيرا | استخدم الكتلة الأخيرة لتشغيل مجموعة من العبارات سواء حدث استثناء أم لا. |
رمي | يتم طرح الاستثناء بعد حدوث المشكلة. هذا هو عمل الكلمة الأساسية Throw. |
بناء جملة Try Catch في VB.Net
يتم تعريف عبارات Try Catch في VB.Net باستخدام بناء الجملة التالي:
Try [ try_Statement(s) ] [ Exit Try ] [ Catch [ exception_name [ As type ] ] [ When expression ] [ catch_Statement(s) ] [ Exit Try ] ] [ Catch ... ] [ Finally [ finally_Statement(s) ] ] End Try
يجب أن تحيط كتلة Try/Catch بالتعليمات البرمجية التي قد تؤدي إلى حدوث استثناء. يُعرف هذا الرمز بالرمز المحمي. يمكنك استخدام عبارات التقاط متعددة عندما تحتاج إلى التقاط أنواع مختلفة من الاستثناءات.
مثال على معالجة الاستثناءات في VB.Net باستخدام Try Catch وأخيرًا
باستخدام عبارات Try/Catch، يمكنك فصل رمز البرنامج العادي عن نظام معالجة الأخطاء. دعونا نوضح كيفية التعامل مع الاستثناء باستخدام الكلمات الأساسية حاول، والتقط، وأخيرًا.
الخطوة 1) إنشاء تطبيق وحدة تحكم جديد.
الخطوة 2) استخدم هذا الرمز:
Module Module1 Sub divisionFunction(ByVal n1 As Integer, ByVal n2 As Integer) Dim answer As Integer Try answer = n1 \ n2 Catch ex As DivideByZeroException Console.WriteLine("Exception: {0}", ex) Finally Console.WriteLine("Answer is: {0}", answer) End Try End Sub Sub Main() divisionFunction(4, 0) Console.ReadKey() End Sub End Module
الخطوة 3) انقر فوق زر البدء من شريط الأدوات لتنفيذ التعليمات البرمجية. يجب أن تحصل على النتيجة التالية:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- إنشاء وحدة تسمى Module1.
- إنشاء إجراء فرعي يسمى DivisionFunction باستخدام وسيطتين صحيحتين n1 وn2. ByVal هي كلمة أساسية لـ VB.Net تشير إلى أنه سيتم تمرير قيم الوسائط حسب القيمة.
- إنشاء متغير عدد صحيح يسمى الإجابة.
- بداية كتلة المحاولة/الالتقاط. نحن بحاجة إلى تطويق الكود الذي نعتقد أنه قد يثير استثناءً في هذه الكتلة.
- إجراء عملية قسمة بين قيم المتغيرين n1 و n2. يتم تعيين نتيجة عملية القسمة للمتغير answer. قد يثير هذا الكود استثناءً، على سبيل المثال، عندما نقسم رقمًا على صفر، وبالتالي قمنا بإحاطته بكتل Try/Catch.
- التقاط الاستثناء المسمى DivideByZeroException وتعيين رسالة الاستثناء التي تم إنشاؤها إلى الملف السابق.
- طباعة بعض النص على وحدة التحكم لإعلام المستخدم بنوع/اسم الاستثناء الذي تم طرحه.
- الكتلة النهائية. سيتم تنفيذ هذا سواء تم اكتشاف الاستثناء أم لا.
- طباعة بعض النص على وحدة التحكم لإظهار نتيجة عملية القسمة.
- نهاية كتلة المحاولة، أي نهاية رمز معالجة الأخطاء.
- نهاية الإجراء الفرعي لوظيفة القسمة.
- بداية الإجراء الفرعي الرئيسي.
- استدعاء/استدعاء الإجراء الفرعي divisionFunction. يتم تمرير قيم حجتي العدد الصحيح هنا. قيمة n1=4 وn2=0. وهذا يعني أن عملية القسمة ستكون 4\0، أي n1\n2.
- إيقاف نافذة وحدة التحكم مؤقتًا في انتظار قيام المستخدم باتخاذ إجراء لإغلاقها.
- نهاية الإجراء الفرعي الرئيسي.
- نهاية الوحدة.
الاستثناءات المحددة من قبل المستخدم في VB.Net
يتيح لك VB.Net تحديد الاستثناءات الخاصة بك. يمكنك الحصول على فئات الاستثناء المعرفة من قبل المستخدم من فئة ApplicationException. ولنوضح ذلك بمثال:
مثال على الاستثناء المحدد من قبل المستخدم في VB.Net
فيما يلي مثال على الاستثناء المحدد من قبل المستخدم في VB.Net:
الخطوة 1) إنشاء تطبيق وحدة تحكم جديد.
الخطوة 2) استخدم الكود التالي:
Module Module1 Public Class HeightIsZeroException : Inherits ApplicationException Public Sub New(ByVal text As String) MyBase.New(text) End Sub End Class Public Class Height Dim height As Integer = 0 Sub showHeight() If (height = 0) Then Throw (New HeightIsZeroException("Zero Height found")) Else Console.WriteLine("Height is: {0}", height) End If End Sub End Class Sub Main() Dim hght As Height = New Height() Try hght.showHeight() Catch ex As HeightIsZeroException Console.WriteLine("HeightIsZeroException: {0}", ex.Message) End Try Console.ReadKey() End Sub End Module
الخطوة 3) انقر فوق زر البدء من الشريط العلوي لتنفيذ التعليمات البرمجية. يجب أن تحصل على النتيجة التالية:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- إنشاء وحدة تسمى Module1.
- إنشاء فئة استثناء باسم HeightIsZeroException. يرث الفصل كل فئة ApplicationException.
- إنشاء إجراء فرعي يسمى جديد. سوف يستغرق وسيطة سلسلة واحدة تسمى النص.
- استدعاء مُنشئ الفئة الأساسية وتمرير الوسيطة أعلاه إليه.
- نهاية الإجراء الفرعي الجديد.
- نهاية فئة HeightIsZeroException.
- إنشاء فئة تسمى الارتفاع. معدّل الوصول العام الخاص به هو عام، مما يعني أنه سيكون متاحًا للعامة.
- إنشاء متغير عدد صحيح يسمى الارتفاع وتهيئة قيمته إلى 0.
- إنشاء إجراء فرعي يسمى showHeight().
- التحقق من أن قيمة المتغير Height هي 0. لقد استخدمنا شرط If...Then.
- لطرح HeightIsZeroException إذا كان الشرط أعلاه صحيحًا. سيتم عرض الرسالة "تم العثور على ارتفاع صفري" عند طرح هذا الاستثناء.
- الجزء الآخر الذي سيتم تنفيذه عندما يكون شرط If غير صحيح.
- رسالة للطباعة على وحدة التحكم توضح الارتفاع عندما لا يكون 0.
- نهاية شرط If.
- نهاية الإجراء الفرعي showHeight().
- ارتفاع نهاية الفصل.
- بداية الإجراء الفرعي الرئيسي.
- إنشاء كائن يسمى الارتفاع كمثيل لفئة الارتفاع.
- بداية كتلة معالجة الاستثناء.
- استدعاء الإجراء الفرعي showHeight() المحدد في فئة الارتفاع. لقد استخدمنا كائنًا من هذه الفئة للوصول إلى هذه الطريقة. قد يؤدي هذا السطر إلى استثناء. لذلك، قمنا بإحاطتها بكود معالجة الاستثناءات.
- التقاط استثناء HeightIsZeroException ككائن سابق في حالة حدوثه.
- الرسالة المراد طباعتها على وحدة التحكم عند اكتشاف HeightIsZeroException.
- نهاية كتلة معالجة الاستثناء.
- قم بإيقاف نافذة وحدة التحكم مؤقتًا في انتظار أن يتخذ المستخدم إجراءً لإغلاقها.
- نهاية الإجراء الفرعي الرئيسي.
- نهاية الوحدة.
رمي الاستثناء في VB.Net
في معالجة الاستثناءات، يمكنك اختيار رمي كائن ما. ومع ذلك، يجب أن يكون الكائن مشتقًا من System.Data. فئة الاستثناء، بشكل مباشر أو غير مباشر. على سبيل المثال:
مثال على استثناء الرمي في VB.Net
فيما يلي مثال على استثناء الرمي في VB.Net:
الخطوة 1) إنشاء تطبيق وحدة تحكم جديد.
الخطوة 2) استخدم الكود التالي:
Module Module1 Sub Main() Try Throw New ApplicationException("Throwing a custom exception") Catch ex As Exception Console.WriteLine(ex.Message) Finally Console.WriteLine("The Finally Block") End Try Console.ReadKey() End Sub End Module
الخطوة 3) انقر فوق زر البدء من الشريط العلوي لتنفيذ التعليمات البرمجية. يجب أن تحصل على ما يلي:
فيما يلي لقطة شاشة للكود:
شرح الكود:
- إنشاء وحدة تسمى Module1.
- بداية الإجراء الفرعي الرئيسي.
- بداية رمز معالجة الأخطاء.
- رمي كائن استثناء. قد يؤدي هذا الكود إلى توليد استثناء، لذا قمنا بإحاطته بكتلة Try/Catch.
- التقاط استثناء ككائن على سبيل المثال إذا ألقى السطر استثناءً.
- طباعة رسالة الاستثناء على وحدة التحكم في حالة حدوثها.
- الكتلة الأخيرة للتشغيل سواء تم اكتشاف الاستثناء أم لا.
- الرسالة التي سيتم طباعتها على وحدة التحكم عند تنفيذ الكتلة الأخيرة.
- نهاية رمز معالجة الاستثناء.
- قم بإيقاف وحدة التحكم مؤقتًا لفترة من الوقت في انتظار أن يتخذ المستخدم إجراءً لإغلاقها.
- نهاية الإجراء الفرعي الرئيسي.
- نهاية الوحدة.
الملخص
- يشير الاستثناء إلى مشكلة تنشأ أثناء تنفيذ البرنامج بسبب ظروف غير متوقعة.
- إذا كنت تشك في أن بعض التعليمات البرمجية ستؤدي إلى إنشاء استثناء، فقم بإحاطة ذلك بكتلة Try/Catch.
- تأتي الكتلة الأخيرة بعد كتلة Try/Catch ويتم تنفيذها سواء تم اكتشاف الاستثناء أم لا.
- يسمح لنا VB.Net بإنشاء استثناءات مخصصة.