Gestionarea excepțiilor în VB.Net (Încercați Catch)

⚡ Rezumat inteligent

Tratarea excepțiilor în VB.Net gestionează erorile de execuție, cum ar fi împărțirea la zero, folosind cuvintele cheie Try, Catch, Finally și Throw, astfel încât un program să poată răspunde la probleme în mod elegant, în loc să se blocheze în timpul execuției.

  • 🔍 excepție: O problemă care apare în timpul execuției, de exemplu împărțirea unui număr la zero.
  • 🛡️ Încearcă și prinzi: Try încapsulează codul riscant; Catch gestionează excepția pe care o ridică.
  • In cele din urma: Blocul Finally rulează indiferent dacă apare sau nu o excepție.
  • 🚦 Arunca: Throw generează un obiect de excepție derivat din clasa System.Exception.
  • 🧩 Excepții personalizate: Moștenește ApplicationException pentru a defini propriile tipuri de excepții.
  • 🤖 Ajutor AI: GitHub Copilot și IntelliCode generează blocuri Try Catch pe măsură ce tastezi.

Gestionarea excepțiilor în VB.Net

Ce este o excepție în VB.Net?

An Excepție în VB.Net se referă la o problemă care apare în timpul execuției programului. Este cauzată de o circumstanță neașteptată. Un bun exemplu este atunci când efectuați o operație de împărțire și apoi împărțiți la zero (0). Se va ridica o excepție.

Ce este gestionarea excepțiilor în VB.Net?

Cu excepții în VB.Net, puteți transfera controlul unui program de la o parte la alta. În VB.Net, excepțiile sunt gestionate folosind următoarele 4 cuvinte cheie:

Cuvânt cheie Detaliu
Încerca Lucrarea blocului Try este de a identifica blocul de cod pentru care va fi activată o anumită excepție. Ar trebui să fie urmată de un bloc(e) de prindere.
Captură Captarea excepției se face în acest bloc. Este un handler de excepție în care este gestionată excepția.
Finally Utilizați blocul Finally pentru a rula un set de instrucțiuni indiferent dacă a apărut sau nu o excepție.
Arunca O excepție este aruncată după apariția unei probleme. Aceasta este lucrarea cuvântului cheie Aruncă.

Având clare rolurile acestor patru cuvinte cheie, luați în considerare modul în care se combină acestea într-o singură afirmație.

Sintaxa lui Try Catch în VB.Net

Instrucțiunile Try Catch din VB.Net sunt definite folosind sintaxa de mai jos:

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

Blocul Try/Catch ar trebui să înconjoare codul care poate ridica o excepție. Acest cod este cunoscut ca un cod protejat. Puteți utiliza mai multe instrucțiuni catch atunci când trebuie să capturați diferite tipuri de excepții.

Exemplu de gestionare a excepțiilor în VB.Net cu Try Catch și Finally

Cu instrucțiunile Try/Catch, puteți separa codul programului obișnuit de sistemul de tratare a erorilor. Să demonstrăm cum se gestionează o excepție folosind cuvintele cheie Try, Catch și Finally.

Pas 1) Creați o nouă aplicație de consolă.

Pas 2) Utilizați acest cod:

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

Pas 3) Faceți clic pe butonul Start din bara de instrumente pentru a executa codul. Ar trebui să obțineți următorul rezultat:

Ieșirea consolei VB.Net Try Catch Finally care arată excepția DivideByZeroException prinsă

Iată o captură de ecran a codului:

Cod exemplu VB.Net Try Catch Finally afișat în Visual Studio

Explicația de Code:

  1. Crearea unui modul numit Module1.
  2. Crearea unei sub-proceduri numită divisionFunction cu două argumente întregi n1 și n2. ByVal este un cuvânt cheie VB.Net care afirmă că valorile argumentelor vor fi transmise după valoare.
  3. Crearea unei variabile întregi numită răspuns.
  4. Începutul blocului Try/Catch. Trebuie să înconjurăm codul despre care bănuim că poate ridica o excepție cu acest bloc.
  5. Efectuarea unei operații de împărțire între valorile variabilelor n1 și n2. Rezultatul operației de împărțire este atribuit variabilei răspuns. Acest cod poate ridica o excepție, de exemplu, atunci când împărțim un număr la zero, prin urmare l-am înconjurat cu blocurile Try/Catch.
  6. Prinderea excepției numită DivideByZeroException și atribuirea mesajului de excepție generat ex.
  7. Imprimarea unui text pe consolă pentru a notifica utilizatorul despre tipul/numele excepției care a fost ridicată.
  8. Blocul Finally. Aceasta se va executa indiferent dacă o excepție este capturată sau nu.
  9. Tipărirea unui text pe consolă care arată rezultatul operațiunii de divizare.
  10. Sfârșitul blocului Try, adică sfârșitul codului de tratare a erorilor.
  11. Sfârșitul subprocedurii de diviziune Funcție.
  12. Începutul sub-procedurii principale.
  13. Apelarea/invocarea subprocedura de diviziuneFunction. Valorile celor două argumente întregi sunt transmise aici. Valoarea lui n1=4 și n2=0. Aceasta înseamnă că operația de împărțire va fi 4\0, adică n1\n2.
  14. Întreruperea ferestrei consolei în așteptarea ca utilizatorul să ia măsuri pentru a o închide.
  15. Sfârșitul subprocedurii principale.
  16. Sfârșitul modulului.

Excepții definite de utilizator în VB.Net

VB.Net vă permite să definiți propriile excepții. Puteți obține clase de excepții definite de utilizator din clasa ApplicationException. Să demonstrăm acest lucru printr-un exemplu:

Exemplu de excepție definită de utilizator în VB.Net

Iată un exemplu de excepție definită de utilizator în VB.Net:

Pas 1) Creați o nouă aplicație de consolă.

Pas 2) Utilizați următorul cod:

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

Pas 3) Faceți clic pe butonul Start din bara de sus pentru a executa codul. Ar trebui să obțineți următorul rezultat:

Mesajul HeightIsZeroException definit de utilizator VB.Net afișat în consolă

Iată o captură de ecran a codului:

Exemplu de cod pentru clasa de excepții definită de utilizator VB.Net în Visual Studio

Explicația de Code:

  1. Crearea unui modul numit Module1.
  2. Crearea unei clase de excepție numită HeightIsZeroException. Clasa moștenește toată clasa ApplicationException.
  3. Crearea unei sub-proceduri numită New. Va fi nevoie de un singur argument șir numit text.
  4. Apelarea constructorului clasei de bază și transmiterea acestuia argumentul de mai sus.
  5. Sfârșitul noii sub-proceduri.
  6. Sfârșitul clasei HeightIsZeroException.
  7. Crearea unei clase numită Height. Modificatorul său de acces public este Public, ceea ce înseamnă că va fi accesibil public.
  8. Crearea unei variabile întregi numită Height și inițializarea valorii acesteia la 0.
  9. Crearea unei sub-proceduri numită showHeight().
  10. Verificarea când valoarea variabilei Înălțime este 0. Am folosit condiția Dacă... Atunci.
  11. Pentru a arunca HeightIsZeroException dacă condiția de mai sus este adevărată. Mesajul Zero Height Found va fi afișat atunci când această excepție este aruncată.
  12. Partea Else va fi executată atunci când condiția If nu este adevărată.
  13. Mesaj de tipărit pe consolă care arată înălțimea atunci când nu este 0.
  14. Sfârșitul condiției If.
  15. Sfârșitul subprocedurii showHeight().
  16. Sfârșitul clasei Înălțimea.
  17. Începutul sub-procedurii principale.
  18. Crearea unui obiect numit Height ca o instanță a clasei Height.
  19. Începutul blocului de gestionare a excepțiilor.
  20. Se invocă subprocedura showHeight() definită în clasa Height. Am folosit un obiect din această clasă pentru a accesa această metodă. Această linie poate duce la o excepție. Prin urmare, am înconjurat-o cu un cod de gestionare a excepțiilor.
  21. Prinderea excepției HeightIsZeroException ca obiect ex în cazul în care apare.
  22. Mesajul de tipărit pe consolă când este capturată HeightIsZeroException.
  23. Sfârșitul blocului de gestionare a excepțiilor.
  24. Întrerupeți fereastra consolei în așteptarea ca un utilizator să ia măsuri pentru a o închide.
  25. Sfârșitul subprocedurii principale.
  26. Sfârșitul modulului.

Aruncă o excepție în VB.Net

În gestionarea excepțiilor, puteți alege să generați un obiect. Cu toate acestea, obiectul trebuie să fie derivat din clasa System.Exception, direct sau indirect. De exemplu:

Exemplu de excepție de aruncare în VB.Net

Mai jos este un exemplu de excepție de tip throw în VB.Net:

Pas 1) Creați o nouă aplicație de consolă.

Pas 2) Utilizați următorul cod:

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

Pas 3) Faceți clic pe butonul Start din bara de sus pentru a executa codul. Ar trebui să obțineți următoarele:

Rezultatul consolei instrucțiunii VB.Net Throw afișează mesajul de excepție personalizat

Iată o captură de ecran a codului:

Exemplu de cod VB.Net Throw exception cu Try Catch Finally

Explicația de Code:

  1. Crearea unui modul numit Module1.
  2. Începutul sub-procedurii principale.
  3. Începutul codului de gestionare a erorilor.
  4. Aruncarea unui obiect excepție. Acest cod poate genera o excepție, prin urmare l-am înconjurat cu un bloc Try/Catch.
  5. Prinderea unei excepții ca obiect ex dacă linia aruncă o excepție.
  6. Imprimarea mesajului de excepție pe consolă în cazul în care apare.
  7. Blocul Finally se rulează dacă o excepție este capturată sau nu.
  8. Mesajul de tipărit pe consolă când blocul Finally este executat.
  9. Sfârșitul codului de gestionare a excepțiilor.
  10. Întrerupeți consola pentru un timp, așteptând ca un utilizator să ia măsuri pentru a o închide.
  11. Sfârșitul subprocedurii principale.
  12. Sfârșitul modulului.

Întrebări frecvente

Da. O instrucțiune Try este validă fără Catch atâta timp cât include un bloc Finally. Acest formular Try Finally rulează cod de curățare, dar nu gestionează excepția în sine.

Da. Enumerați mai multe blocuri Catch pentru a gestiona diferite tipuri de excepții. Ordonați-le de la cea mai specifică la cea mai puțin specifică, deoarece VB.Net le verifică în secvență și folosește prima potrivire.

Aproape întotdeauna. Finally se execută indiferent dacă este detectată o excepție sau nu și chiar și după o excepție Return. Este omisă doar în cazul unei instrucțiuni End sau al unei excepții StackOverflowException.

Throw re-crește excepția curentă și păstrează stiva originală. trace. Throw ex resetează stiva trace la linia curentă, ascunzând locul unde a început cu adevărat eroarea. Se preferă Throw simplu.

O eroare de sintaxă este detectată de compilator înainte de rularea programului. O excepție apare la momentul execuției și poate fi gestionată cu un bloc Try Catch.

Printre cele mai frecvente se numără DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException și OverflowException. Toate moștenesc de la System.Exception și pot fi detectate individual.

Da. Copilotul GitHub transformă un comentariu în limba engleză simplă într-un bloc complet Try Catch Finally și sugerează tipul corect de excepție. Revizuiți întotdeauna handler-ul generat.

Da. Visual Studio inteliCode oferă completări de linii întregi, sensibile la context, pentru clauzele Catch și tipurile de excepții, învățate din mii de proiecte open-source.

Rezumați această postare cu: