Unntakshåndtering i VB.Net (Try Catch)

⚡ Smart oppsummering

Unntakshåndtering i VB.Net håndterer kjøretidsfeil, for eksempel dividering med null, ved hjelp av nøkkelordene Try, Catch, Finally og Throw, slik at et program kan reagere på problemer grasiøst i stedet for å krasje under kjøring.

  • 🔍 unntak: Et problem som oppstår under utførelse, for eksempel å dele et tall med null.
  • 🛡️ Prøv og fang: Try pakker inn den risikable koden; Catch håndterer unntaket den genererer.
  • Endelig: Finally-blokken kjører uansett om det oppstår et unntak eller ikke.
  • 🚦 Kaste: Throw hever et unntaksobjekt avledet fra System.Exception-klassen.
  • 🧩 Tilpassede unntak: Arv ApplicationException for å definere dine egne unntakstyper.
  • 🤖 AI-hjelp: GitHub Copilot og IntelliCode generer Try Catch-blokker mens du skriver.

Unntakshåndtering i VB.Net

Hva er et unntak i VB.Net?

An Unntak i VB.Net refererer til et problem som oppstår under programkjøring. Det er forårsaket av en uventet omstendighet. Et godt eksempel er når du utfører en divisjonsoperasjon, og deretter deler du med null (0). Et unntak vil bli reist.

Hva er unntakshåndtering i VB.Net?

Med unntak i VB.Net, kan du overføre kontrollen av et program fra en del til en annen. I VB.Net håndteres unntak med følgende 4 nøkkelord:

søkeord Detalj
Prøve Arbeidet med Try-blokken er å identifisere kodeblokken som et spesifikt unntak vil bli aktivert for. Den skal følges av en fangstblokk(er).
Catch Oppfanging av unntaket gjøres i denne blokken. Det er en unntaksbehandler der unntaket håndteres.
Endelig Bruk Finally-blokken til å kjøre et sett med setninger om et unntak har skjedd eller ikke.
Kast Et unntak blir kastet etter at et problem har oppstått. Dette er arbeidet med søkeordet Throw.

Når rollene til disse fire nøkkelordene er klare, bør du vurdere hvordan de kombineres i én enkelt setning.

Syntaks for Try Catch i VB.Net

Try Catch-setningene i VB.Net er definert ved å bruke syntaksen nedenfor:

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-blokken skal omslutte koden som kan føre til et unntak. Denne koden er kjent som en beskyttet kode. Du kan bruke flere catch-setninger når du trenger å fange opp ulike typer unntak.

Eksempel på unntakshåndtering i VB.Net med Try Catch og Finally

Med Try/Catch-setningene kan du skille den vanlige programkoden fra feilhåndteringssystemet. La oss demonstrere hvordan du håndterer et unntak ved hjelp av nøkkelordene Try, Catch og Finally.

Trinn 1) Opprett en ny konsollapplikasjon.

Trinn 2) Bruk denne koden:

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

Trinn 3) Klikk på Start-knappen fra verktøylinjen for å utføre koden. Du bør få følgende utgang:

VB.Net Prøv å fange Endelig konsollutdata som viser den fangede DivideByZeroException

Her er et skjermbilde av koden:

VB.Net Try Catch Endelig eksempelkode vist i Visual Studio

Forklaring til Code:

  1. Opprette en modul kalt Module1.
  2. Opprette en underprosedyre kalt divisionFunction med to heltallsargumenter n1 og n2. ByVal er et VB.Net nøkkelord som sier at verdiene til argumentene vil bli sendt av verdi.
  3. Opprette en heltallsvariabel kalt svar.
  4. Start av Try/Catch-blokken. Vi må omgi koden som vi mistenker kan gi et unntak med denne blokken.
  5. Utføre en divisjonsoperasjon mellom verdiene til variablene n1 og n2. Resultatet av divisjonsoperasjonen tilordnes variabelsvaret. Denne koden kan føre til et unntak, for eksempel når vi deler et tall med null, og derfor har vi omgitt det med Try/Catch-blokkene.
  6. Å fange unntaket kalt DivideByZeroException og tilordne den genererte unntaksmeldingen til eksen.
  7. Skriver ut litt tekst på konsollen for å varsle brukeren om typen/navnet på unntaket som ble reist.
  8. Endelig blokken. Dette vil utføres enten et unntak fanges opp eller ikke.
  9. Skriver ut litt tekst på konsollen som viser resultatet av delingsoperasjonen.
  10. Slutt på Try-blokken, det vil si slutten av feilhåndteringskoden.
  11. Slutt på delprosedyren Funksjon.
  12. Start av hoveddelprosedyren.
  13. Kalle/påkalle underprosedyren divisjonFunksjon. Verdiene til de to heltallsargumentene sendes her. Verdien av n1=4 og n2=0. Dette betyr at divisjonsoperasjonen vil være 4\0, det vil si n1\n2.
  14. Setter konsollvinduet på pause og venter på at brukeren skal gjøre noe for å lukke det.
  15. Slutt på hoveddelprosedyren.
  16. Slutt på modulen.

Brukerdefinerte unntak i VB.Net

VB.Net lar deg definere dine egne unntak. Du kan hente brukerdefinerte unntaksklasser fra ApplicationException-klassen. La oss demonstrere dette med et eksempel:

Eksempel på brukerdefinert unntak i VB.Net

Her er et eksempel på et brukerdefinert unntak i VB.Net:

Trinn 1) Opprett en ny konsollapplikasjon.

Trinn 2) Bruk følgende kode:

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

Trinn 3) Klikk på Start-knappen fra den øverste linjen for å utføre koden. Du bør få følgende utgang:

VB.Net brukerdefinert HeightIsZeroException-melding skrevet ut på konsollen

Her er et skjermbilde av koden:

Eksempelkode for brukerdefinert unntaksklasse i VB.Net i Visual Studio

Forklaring til Code:

  1. Opprette en modul kalt Module1.
  2. Opprette en unntaksklasse kalt HeightIsZeroException. Klassen arver hele ApplicationException-klassen.
  3. Opprette en underprosedyre kalt Ny. Det vil ta ett strengargument kalt tekst.
  4. Kaller opp basisklassekonstruktøren og sender argumentet ovenfor til den.
  5. Slutt på den nye underprosedyren.
  6. Slutten av HeightIsZeroException-klassen.
  7. Opprette en klasse som heter Høyde. Modifikatoren for offentlig tilgang er offentlig, noe som betyr at den vil være offentlig tilgjengelig.
  8. Opprette en heltallsvariabel kalt Høyde og initialisere verdien til 0.
  9. Opprette en underprosedyre kalt showHeight().
  10. Sjekker når verdien av variabelen Height er 0. Vi har brukt If…Then-betingelsen.
  11. For å kaste HeightIsZeroException hvis betingelsen ovenfor er sann. Meldingen Null høyde funnet vil vises når dette unntaket blir kastet.
  12. Den andre delen som skal utføres når If-betingelsen ikke er sann.
  13. Melding som skal skrives ut på konsollen som viser høyden når den ikke er 0.
  14. Slutt på If-tilstanden.
  15. Slutt på underprosedyren showHeight().
  16. Slutt på klassen Høyde.
  17. Start av hoveddelprosedyren.
  18. Opprette et objekt kalt Height som en forekomst av Height-klassen.
  19. Start av unntakshåndteringsblokken.
  20. Kaller underprosedyren showHeight() som er definert i Height-klassen. Vi har brukt et objekt i denne klassen for å få tilgang til denne metoden. Denne linjen kan resultere i et unntak. Derfor har vi omgitt den med en unntakshåndteringskode.
  21. Å fange HeightIsZeroException Exception som objekt ex i tilfelle det oppstår.
  22. Meldingen som skal skrives ut på konsollen når HeightIsZeroException fanges opp.
  23. Slutt på unntakshåndteringsblokken.
  24. Sett konsollvinduet på pause mens du venter på at en bruker skal gjøre noe for å lukke det.
  25. Slutt på hoveddelprosedyren.
  26. Slutt på modulen.

Kast unntak i VB.Net

I unntakshåndtering kan du velge å kaste et objekt. Objektet må imidlertid være avledet fra System.Exception-klassen, direkte eller indirekte. For eksempel:

Eksempel på kasteunntak i VB.Net

Nedenfor er et eksempel på et throw-unntak i VB.Net:

Trinn 1) Opprett en ny konsollapplikasjon.

Trinn 2) Bruk følgende kode:

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

Trinn 3) Klikk på Start-knappen fra den øverste linjen for å utføre koden. Du bør få følgende:

VB.Net Throw-setningens konsollutdata som viser den tilpassede unntaksmeldingen

Her er et skjermbilde av koden:

VB.Net Throw-unntakseksempelkode med Try Catch Finally

Forklaring til Code:

  1. Opprette en modul kalt Module1.
  2. Start av hoveddelprosedyren.
  3. Start av feilhåndteringskoden.
  4. Kaster et unntaksobjekt. Denne koden kan generere et unntak, derfor har vi omgitt den med en Try/Catch-blokk.
  5. Å fange et unntak som objekt eks hvis linjen kaster et unntak.
  6. Skriver ut unntaksmeldingen på konsollen i tilfelle det oppstår.
  7. Til slutt-blokken for å kjøre uansett om et unntak fanges opp eller ikke.
  8. Meldingen som skal skrives ut på konsollen når Endelig-blokken er utført.
  9. Slutt på unntakshåndteringskoden.
  10. Sett konsollen på pause en stund mens du venter på at en bruker skal gjøre noe for å lukke den.
  11. Slutt på hoveddelprosedyren.
  12. Slutt på modulen.

Spørsmål og svar

Ja. En Try-setning er gyldig uten Catch så lenge den inneholder en Finally-blokk. Dette Try Finally-skjemaet kjører opprydningskode, men håndterer ikke selve unntaket.

Ja. List opp flere Catch-blokker for å håndtere ulike unntakstyper. Sorter dem fra mest spesifikke til minst spesifikke, fordi VB.Net sjekker dem i rekkefølge og bruker det første treffet.

Nesten alltid. Utfører Finally enten et unntak blir fanget eller ikke, og selv etter en Return. Den hoppes bare over i en End-setning eller en StackOverflowException.

Throw hever det gjeldende unntaket på nytt og bevarer den opprinnelige stakken. trace. Kast ex tilbakestiller stakken trace til gjeldende linje, og skjuler der feilen egentlig startet. Foretrekker vanlig Throw.

En syntaksfeil fanges opp av kompilatoren før programmet kjører. Et unntak oppstår under kjøretid, under utførelse, og kan håndteres med en Try Catch-blokk.

Vanlige eksempler inkluderer DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException og OverflowException. Alle arver fra System.Exception og kan fanges opp individuelt.

Ja. GitHub Copilot Gjør en kommentar i vanlig engelsk om til en fullstendig Try Catch Finally-blokk og foreslår riktig unntakstype. Se alltid gjennom den genererte behandleren.

Ja. Visual Studio intelliCode tilbyr kontekstbevisste fullføringer av hele linjer for Catch-klausuler og unntakstyper, lært fra tusenvis av åpen kildekode-prosjekter.

Oppsummer dette innlegget med: