Håndtering af undtagelser i VB.Net (Try Catch)

⚡ Smart opsummering

Undtagelseshåndtering i VB.Net håndterer runtime-fejl, såsom division med nul, ved hjælp af nøgleordene Try, Catch, Finally og Throw, så et program kan reagere på problemer elegant i stedet for at gå ned under udførelsen.

  • 🔍 Undtagelse: Et problem der opstår under udførelse, for eksempel at dividere et tal med nul.
  • 🛡️ Prøv og fang: Try ombryder den risikable kode; Catch håndterer den undtagelse, den rejser.
  • Langt om længe: Finally-blokken kører, uanset om der opstår en undtagelse eller ej.
  • 🚦 Kaste: Throw rejser et exception-objekt afledt af System.Exception-klassen.
  • 🧩 Brugerdefinerede undtagelser: Arv ApplicationException for at definere dine egne undtagelsestyper.
  • 🤖 AI-hjælp: GitHub Copilot og IntelliCode Generer Try Catch-blokke, mens du skriver.

Håndtering af undtagelser i VB.Net

Hvad er en undtagelse i VB.Net?

An undtagelse i VB.Net henviser til et problem, der opstår under programafvikling. Det er forårsaget af en uventet omstændighed. Et godt eksempel er, når du udfører en divisionsoperation, og så dividerer du med nul (0). En undtagelse vil blive rejst.

Hvad er undtagelseshåndtering i VB.Net?

Med undtagelser i VB.Net, kan du overføre styringen af ​​et program fra en del til en anden. I VB.Net håndteres undtagelser ved hjælp af følgende 4 nøgleord:

Søgeord Detalje
Prøv Try-blokkens arbejde er at identificere den kodeblok, for hvilken en specifik undtagelse vil blive aktiveret. Den skal efterfølges af en fangeblok(er).
brydning Indfangning af undtagelsen sker i denne blok. Det er en undtagelseshandler, hvor undtagelsen håndteres.
Endelig Brug Finally-blokken til at køre et sæt sætninger, uanset om der er sket en undtagelse eller ej.
Kast En undtagelse er kastet efter forekomsten af ​​et problem. Dette er værket af Throw nøgleordet.

Når rollerne for disse fire nøgleord er klare, kan du overveje, hvordan de kombineres i en enkelt sætning.

Syntaks for Try Catch i VB.Net

Try Catch-sætningerne i VB.Net er defineret ved hjælp af nedenstående syntaks:

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 omgive koden, der kan give anledning til en undtagelse. Denne kode er kendt som en beskyttet kode. Du kan bruge flere catch-udsagn, når du skal fange forskellige typer undtagelser.

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

Med Try/Catch-sætningerne kan du adskille din almindelige programkode fra fejlhåndteringssystemet. Lad os demonstrere, hvordan man håndterer en undtagelse ved hjælp af nøgleordene Try, Catch og Finally.

Trin 1) Opret en ny konsolapplikation.

Trin 2) Brug denne kode:

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

Trin 3) Klik på knappen Start på værktøjslinjen for at udføre koden. Du bør få følgende output:

VB.Net Prøv at fange Endelig viser konsoloutputtet den fangede DivideByZeroException

Her er et skærmbillede af koden:

VB.Net Try Catch Endelig eksempelkode vist i Visual Studio

Forklaring af Code:

  1. Oprettelse af et modul ved navn Modul1.
  2. Oprettelse af en underprocedure ved navn divisionFunction med to heltalsargumenter n1 og n2. ByVal er et VB.Net nøgleord, der angiver, at værdierne af argumenterne vil blive videregivet af værdi.
  3. Oprettelse af en heltalsvariabel med navnet svar.
  4. Start af Try/Catch-blokken. Vi er nødt til at omgive koden, som vi har mistanke om kan rejse en undtagelse med denne blok.
  5. Udførelse af en divisionsoperation mellem værdierne af variable n1 og n2. Resultatet af divisionsoperationen tildeles variabelsvaret. Denne kode kan rejse en undtagelse, for eksempel når vi dividerer et tal med nul, derfor har vi omgivet det med Try/Catch-blokkene.
  6. At fange undtagelsen ved navn DivideByZeroException og tildele den genererede undtagelsesmeddelelse til ex.
  7. Udskrivning af tekst på konsollen for at underrette brugeren om typen/navnet på den undtagelse, der blev rejst.
  8. Endelig blok. Dette vil udføre, uanset om en undtagelse er fanget eller ej.
  9. Udskriver noget tekst på konsollen, der viser resultatet af opdelingen.
  10. Slut på Try-blokken, det vil sige slutningen af ​​fejlhåndteringskoden.
  11. Afslutning af divisionen Funktions underprocedure.
  12. Start af hovedunderproceduren.
  13. Kald/påkaldelse af divisionFunction underproceduren. Værdierne af de to heltalsargumenter sendes her. Værdien af ​​n1=4 og n2=0. Dette betyder, at divisionsoperationen vil være 4\0, det vil sige n1\n2.
  14. Sætter konsolvinduet på pause og venter på, at brugeren foretager handling for at lukke det.
  15. Afslutning af hovedunderproceduren.
  16. Slut på modulet.

Brugerdefinerede undtagelser i VB.Net

VB.Net giver dig mulighed for at definere dine egne undtagelser. Du kan hente brugerdefinerede undtagelsesklasser fra ApplicationException-klassen. Lad os demonstrere dette med et eksempel:

Eksempel på brugerdefineret undtagelse i VB.Net

Her er et eksempel på en brugerdefineret undtagelse i VB.Net:

Trin 1) Opret en ny konsolapplikation.

Trin 2) Brug 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

Trin 3) Klik på knappen Start fra den øverste bjælke for at udføre koden. Du bør få følgende output:

VB.Net brugerdefineret HeightIsZeroException-meddelelse udskrevet på konsollen

Her er et skærmbillede af koden:

Eksempelkode for brugerdefineret undtagelsesklasse i VB.Net i Visual Studio

Forklaring af Code:

  1. Oprettelse af et modul ved navn Modul1.
  2. Oprettelse af en undtagelsesklasse ved navn HeightIsZeroException. Klassen arver hele ApplicationException-klassen.
  3. Oprettelse af en underprocedure med navnet Ny. Det vil tage et strengargument med navnet tekst.
  4. Kalder basisklassekonstruktøren og sender ovenstående argument til den.
  5. Slut på den nye underprocedure.
  6. Slutningen af ​​klassen HeightIsZeroException.
  7. Oprettelse af en klasse ved navn Højde. Dens offentlig adgangsmodifikator er Offentlig, hvilket betyder, at den vil være offentligt tilgængelig.
  8. Oprettelse af en heltalsvariabel ved navn Height og initialisering af dens værdi til 0.
  9. Oprettelse af en underprocedure ved navn showHeight().
  10. Kontrollerer, hvornår værdien af ​​variablen Højde er 0. Vi har brugt betingelsen If...Then.
  11. At kaste HeightIsZeroException, hvis ovenstående betingelse er sand. Meddelelsen Zero Height Found vil blive vist, når denne undtagelse kastes.
  12. Den anden del, der skal udføres, når If-betingelsen ikke er sand.
  13. Besked, der skal udskrives på konsollen, der viser højden, når den ikke er 0.
  14. Slut på If-betingelsen.
  15. Slut på showHeight()-underproceduren.
  16. Slutningen af ​​klassen Højde.
  17. Start af hovedunderproceduren.
  18. Oprettelse af et objekt med navnet Height som en forekomst af klassen Height.
  19. Start af undtagelseshåndteringsblokken.
  20. Aktivering af underproceduren showHeight(), som er defineret i Height-klassen. Vi har brugt et objekt fra denne klasse til at tilgå denne metode. Denne linje kan resultere i en undtagelse. Derfor har vi omgivet den med en undtagelseshåndteringskode.
  21. At fange HeightIsZeroException Exception som objekt ex, hvis det opstår.
  22. Meddelelsen, der skal udskrives på konsollen, når HeightIsZeroException er fanget.
  23. Slut på undtagelseshåndteringsblokken.
  24. Sæt konsolvinduet på pause, mens du venter på, at en bruger foretager handling for at lukke det.
  25. Afslutning af hovedunderproceduren.
  26. Slut på modulet.

Kast undtagelse i VB.Net

I undtagelseshåndtering kan du vælge at kaste et objekt. Objektet skal dog være afledt af System.Exception-klassen, direkte eller indirekte. For eksempel:

Eksempel på kasteundtagelse i VB.Net

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

Trin 1) Opret en ny konsolapplikation.

Trin 2) Brug 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

Trin 3) Klik på knappen Start fra den øverste bjælke for at udføre koden. Du bør få følgende:

VB.Net Throw-sætningens konsoloutput, der viser den brugerdefinerede undtagelsesmeddelelse

Her er et skærmbillede af koden:

VB.Net Throw-undtagelseseksempelkode med Try Catch Finally

Forklaring af Code:

  1. Oprettelse af et modul ved navn Modul1.
  2. Start af hovedunderproceduren.
  3. Start af fejlhåndteringskoden.
  4. Kaster et undtagelsesobjekt. Denne kode kan generere en undtagelse, derfor har vi omgivet den med en Try/Catch-blok.
  5. At fange en undtagelse som objekt ex, hvis linjen kaster en undtagelse.
  6. Udskriver undtagelsesmeddelelsen på konsollen i tilfælde af, at den opstår.
  7. Blokken Endelig for at køre, uanset om en undtagelse er fanget eller ej.
  8. Meddelelsen, der skal udskrives på konsollen, når blokken Endelig udføres.
  9. Slut på undtagelseshåndteringskoden.
  10. Sæt konsollen på pause i et stykke tid, mens du venter på, at en bruger foretager handling for at lukke den.
  11. Afslutning af hovedunderproceduren.
  12. Slut på modulet.

Ofte Stillede Spørgsmål

Ja. En Try-sætning er gyldig uden Catch, så længe den indeholder en Finally-blok. Denne Try Finally-formular kører oprydningskode, men håndterer ikke selve undtagelsen.

Ja. Angiv flere Catch-blokke til at håndtere forskellige undtagelsestyper. Sorter dem fra mest specifikke til mindst specifikke, fordi VB.Net tjekker dem i rækkefølge og bruger det første match.

Næsten altid. Udfører Finally uanset om en undtagelse fanges eller ej, og selv efter en Return. Den springes kun over ved en End-sætning eller en StackOverflowException.

Throw genforhøjer den aktuelle undtagelse og bevarer dens oprindelige stak trace. Throw ex nulstiller stakken trace til den aktuelle linje, og skjuler hvor fejlen virkelig startede. Foretrækker almindelig Throw.

En syntaksfejl opdages af compileren, før programmet kører. En undtagelse opstår under kørsel, under udførelsen, og kan håndteres med en Try Catch-blok.

Hyppige eksempler inkluderer DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException og OverflowException. Alle arver fra System.Exception og kan registreres individuelt.

Ja. GitHub Copilot omdanner en kommentar på almindeligt engelsk til en fuld Try Catch Finally-blok og foreslår den rigtige undtagelsestype. Gennemgå altid den genererede handler.

Ja. Visual Studio IntelliCode tilbyder kontekstbevidste fuldførelser af hele linjer for Catch-klausuler og undtagelsestyper, lært fra tusindvis af open source-projekter.

Opsummer dette indlæg med: