معالجة الاستثناءات في 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) انقر فوق زر البدء من شريط الأدوات لتنفيذ التعليمات البرمجية. يجب أن تحصل على النتيجة التالية:

معالجة الاستثناء

فيما يلي لقطة شاشة للكود:

معالجة الاستثناء

شرح الكود:

  1. إنشاء وحدة تسمى Module1.
  2. إنشاء إجراء فرعي يسمى DivisionFunction باستخدام وسيطتين صحيحتين n1 وn2. ByVal هي كلمة أساسية لـ VB.Net تشير إلى أنه سيتم تمرير قيم الوسائط حسب القيمة.
  3. إنشاء متغير عدد صحيح يسمى الإجابة.
  4. بداية كتلة المحاولة/الالتقاط. نحن بحاجة إلى تطويق الكود الذي نعتقد أنه قد يثير استثناءً في هذه الكتلة.
  5. إجراء عملية قسمة بين قيم المتغيرين n1 و n2. يتم تعيين نتيجة عملية القسمة للمتغير answer. قد يثير هذا الكود استثناءً، على سبيل المثال، عندما نقسم رقمًا على صفر، وبالتالي قمنا بإحاطته بكتل Try/Catch.
  6. التقاط الاستثناء المسمى DivideByZeroException وتعيين رسالة الاستثناء التي تم إنشاؤها إلى الملف السابق.
  7. طباعة بعض النص على وحدة التحكم لإعلام المستخدم بنوع/اسم الاستثناء الذي تم طرحه.
  8. الكتلة النهائية. سيتم تنفيذ هذا سواء تم اكتشاف الاستثناء أم لا.
  9. طباعة بعض النص على وحدة التحكم لإظهار نتيجة عملية القسمة.
  10. نهاية كتلة المحاولة، أي نهاية رمز معالجة الأخطاء.
  11. نهاية الإجراء الفرعي لوظيفة القسمة.
  12. بداية الإجراء الفرعي الرئيسي.
  13. استدعاء/استدعاء الإجراء الفرعي divisionFunction. يتم تمرير قيم حجتي العدد الصحيح هنا. قيمة n1=4 وn2=0. وهذا يعني أن عملية القسمة ستكون 4\0، أي n1\n2.
  14. إيقاف نافذة وحدة التحكم مؤقتًا في انتظار قيام المستخدم باتخاذ إجراء لإغلاقها.
  15. نهاية الإجراء الفرعي الرئيسي.
  16. نهاية الوحدة.

الاستثناءات المحددة من قبل المستخدم في 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) انقر فوق زر البدء من الشريط العلوي لتنفيذ التعليمات البرمجية. يجب أن تحصل على النتيجة التالية:

استثناء محدد من قبل المستخدم

فيما يلي لقطة شاشة للكود:

استثناء محدد من قبل المستخدم

شرح الكود:

  1. إنشاء وحدة تسمى Module1.
  2. إنشاء فئة استثناء باسم HeightIsZeroException. يرث الفصل كل فئة ApplicationException.
  3. إنشاء إجراء فرعي يسمى جديد. سوف يستغرق وسيطة سلسلة واحدة تسمى النص.
  4. استدعاء مُنشئ الفئة الأساسية وتمرير الوسيطة أعلاه إليه.
  5. نهاية الإجراء الفرعي الجديد.
  6. نهاية فئة HeightIsZeroException.
  7. إنشاء فئة تسمى الارتفاع. معدّل الوصول العام الخاص به هو عام، مما يعني أنه سيكون متاحًا للعامة.
  8. إنشاء متغير عدد صحيح يسمى الارتفاع وتهيئة قيمته إلى 0.
  9. إنشاء إجراء فرعي يسمى showHeight().
  10. التحقق من أن قيمة المتغير Height هي 0. لقد استخدمنا شرط If...Then.
  11. لطرح HeightIsZeroException إذا كان الشرط أعلاه صحيحًا. سيتم عرض الرسالة "تم العثور على ارتفاع صفري" عند طرح هذا الاستثناء.
  12. الجزء الآخر الذي سيتم تنفيذه عندما يكون شرط If غير صحيح.
  13. رسالة للطباعة على وحدة التحكم توضح الارتفاع عندما لا يكون 0.
  14. نهاية شرط If.
  15. نهاية الإجراء الفرعي showHeight().
  16. ارتفاع نهاية الفصل.
  17. بداية الإجراء الفرعي الرئيسي.
  18. إنشاء كائن يسمى الارتفاع كمثيل لفئة الارتفاع.
  19. بداية كتلة معالجة الاستثناء.
  20. استدعاء الإجراء الفرعي showHeight() المحدد في فئة الارتفاع. لقد استخدمنا كائنًا من هذه الفئة للوصول إلى هذه الطريقة. قد يؤدي هذا السطر إلى استثناء. لذلك، قمنا بإحاطتها بكود معالجة الاستثناءات.
  21. التقاط استثناء HeightIsZeroException ككائن سابق في حالة حدوثه.
  22. الرسالة المراد طباعتها على وحدة التحكم عند اكتشاف HeightIsZeroException.
  23. نهاية كتلة معالجة الاستثناء.
  24. قم بإيقاف نافذة وحدة التحكم مؤقتًا في انتظار أن يتخذ المستخدم إجراءً لإغلاقها.
  25. نهاية الإجراء الفرعي الرئيسي.
  26. نهاية الوحدة.

رمي الاستثناء في 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) انقر فوق زر البدء من الشريط العلوي لتنفيذ التعليمات البرمجية. يجب أن تحصل على ما يلي:

رمي الاستثناء

فيما يلي لقطة شاشة للكود:

رمي الاستثناء

شرح الكود:

  1. إنشاء وحدة تسمى Module1.
  2. بداية الإجراء الفرعي الرئيسي.
  3. بداية رمز معالجة الأخطاء.
  4. رمي كائن استثناء. قد يؤدي هذا الكود إلى توليد استثناء، لذا قمنا بإحاطته بكتلة Try/Catch.
  5. التقاط استثناء ككائن على سبيل المثال إذا ألقى السطر استثناءً.
  6. طباعة رسالة الاستثناء على وحدة التحكم في حالة حدوثها.
  7. الكتلة الأخيرة للتشغيل سواء تم اكتشاف الاستثناء أم لا.
  8. الرسالة التي سيتم طباعتها على وحدة التحكم عند تنفيذ الكتلة الأخيرة.
  9. نهاية رمز معالجة الاستثناء.
  10. قم بإيقاف وحدة التحكم مؤقتًا لفترة من الوقت في انتظار أن يتخذ المستخدم إجراءً لإغلاقها.
  11. نهاية الإجراء الفرعي الرئيسي.
  12. نهاية الوحدة.

الملخص

  • يشير الاستثناء إلى مشكلة تنشأ أثناء تنفيذ البرنامج بسبب ظروف غير متوقعة.
  • إذا كنت تشك في أن بعض التعليمات البرمجية ستؤدي إلى إنشاء استثناء، فقم بإحاطة ذلك بكتلة Try/Catch.
  • تأتي الكتلة الأخيرة بعد كتلة Try/Catch ويتم تنفيذها سواء تم اكتشاف الاستثناء أم لا.
  • يسمح لنا VB.Net بإنشاء استثناءات مخصصة.