Foutafhandeling in VB.Net (Try Catch)

⚡ Slimme samenvatting

Foutafhandeling in VB.Net beheert runtimefouten, zoals delen door nul, met behulp van de trefwoorden Try, Catch, Finally en Throw, zodat een programma op een gecontroleerde manier op problemen kan reageren in plaats van vast te lopen tijdens de uitvoering.

  • 🔍 uitzondering: Een probleem dat zich voordoet tijdens de uitvoering, bijvoorbeeld het delen van een getal door nul.
  • 🛡️ Probeer het te vangen: De `try`-blok omsluit de risicovolle code; `catch` behandelt de uitzondering die daardoor wordt gegenereerd.
  • Tot slot: Het Finally-blok wordt uitgevoerd ongeacht of er een uitzondering optreedt.
  • 🚦 Gooien: Throw genereert een exception-object dat is afgeleid van de System.Exception-klasse.
  • 🧩 Aangepaste uitzonderingen: Erf van ApplicationException om uw eigen uitzonderingstypen te definiëren.
  • 🤖 AI-ondersteuning: GitHub Copilot en IntelliCode Genereer Try Catch-blokken terwijl je typt.

Foutafhandeling in VB.Net

Wat is een uitzondering in VB.Net?

An uitzondering in VB.Net verwijst naar een probleem dat ontstaat tijdens de uitvoering van een programma. Het wordt veroorzaakt door een onverwachte omstandigheid. Een goed voorbeeld is wanneer u een deling uitvoert en vervolgens deelt door nul (0). Er wordt een uitzondering gegenereerd.

Wat is uitzonderingsafhandeling in VB.Net?

Met uitzonderingen erin VB.Net, kunt u de controle over een programma van het ene deel naar het andere overdragen. In VB.Net worden uitzonderingen afgehandeld met behulp van de volgende 4 trefwoorden:

Keyword Detail
Probeer Het werk van het Try-blok is het identificeren van het codeblok waarvoor een specifieke uitzondering wordt geactiveerd. Het moet worden gevolgd door (een) catch-blok(ken).
het worstelen Het opvangen van de uitzondering gebeurt in dit blok. Het is een uitzonderingshandler waarin de uitzondering wordt afgehandeld.
Eindelijk Gebruik het blok Eindelijk om een ​​reeks instructies uit te voeren, ongeacht of er een uitzondering is opgetreden of niet.
Gooien Er wordt een uitzondering gegenereerd nadat er een probleem is opgetreden. Dit is het werk van het trefwoord Throw.

Nu de rol van deze vier sleutelwoorden duidelijk is, kunt u bekijken hoe ze in één zin gecombineerd kunnen worden.

Syntaxis van Try Catch in VB.Net

De Try Catch-instructies in VB.Net worden gedefinieerd met behulp van de onderstaande syntaxis:

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

Het Try/Catch-blok moet de code omringen die mogelijk een uitzondering veroorzaakt. Deze code staat bekend als een beveiligde code. U kunt meerdere catch-instructies gebruiken als u verschillende soorten uitzonderingen moet opvangen.

Voorbeeld van afhandeling van uitzonderingen in VB.Net met Try Catch en Final

Met try-catch-instructies kunt u uw gewone programmacode scheiden van het foutafhandelingssysteem. We laten zien hoe u een uitzondering kunt afhandelen met behulp van de trefwoorden try, catch en finally.

Stap 1) Maak een nieuwe consoletoepassing.

Stap 2) Gebruik deze code:

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

Stap 3) Klik op de Start-knop in de werkbalk om de code uit te voeren. U zou de volgende uitvoer moeten krijgen:

VB.Net Try Catch Finally console-uitvoer die de opgevangen DivideByZeroException weergeeft.

Hier is een screenshot van de code:

Voorbeeldcode voor Try-Catch-Finally in VB.Net, zoals weergegeven in Visual Studio.

Uitleg van Code:

  1. Een module maken met de naam Module1.
  2. Een subprocedure maken met de naam divisieFunction met twee integer-argumenten n1 en n2. De ByVal is een VB.Net-sleutelwoord dat aangeeft dat de waarden van de argumenten per waarde worden doorgegeven.
  3. Een geheel getalvariabele maken met de naam antwoord.
  4. Begin van het Try/Catch-blok. We moeten de code omringen waarvan we vermoeden dat deze een uitzondering kan opleveren met dit blok.
  5. Een delingsbewerking uitvoeren tussen de waarden van variabelen n1 en n2. Het resultaat van de delingsbewerking wordt toegewezen aan de variabele answer. Deze code kan een uitzondering veroorzaken, bijvoorbeeld wanneer we een getal delen door nul, daarom hebben we het omgeven met de Try/Catch-blokken.
  6. Het opvangen van de uitzondering met de naam DivideByZeroException en het toewijzen van het gegenereerde uitzonderingsbericht aan de ex.
  7. Het afdrukken van wat tekst op de console om de gebruiker op de hoogte te stellen van het type/de naam van de uitzondering die is opgetreden.
  8. Het Eindelijk-blok. Dit wordt uitgevoerd, ongeacht of er een uitzondering wordt opgevangen of niet.
  9. Er wordt een tekst op de console afgedrukt met het resultaat van de deling.
  10. Einde van het Try-blok, dat wil zeggen het einde van de foutafhandelingscode.
  11. Einde van de deelprocedure divisieFunctie.
  12. Start van de hoofdsubprocedure.
  13. De divisionFunction-subprocedure aanroepen/aanroepen. De waarden van de twee integer-argumenten worden hier doorgegeven. De waarde van n1=4 en n2=0. Dit betekent dat de delingsbewerking 4\0 zal zijn, dat wil zeggen n1\n2.
  14. Het consolevenster pauzeren, wachtend tot de gebruiker actie onderneemt om het te sluiten.
  15. Einde van de hoofdsubprocedure.
  16. Einde van de module.

Door de gebruiker gedefinieerde uitzonderingen in VB.Net

In VB.Net kunt u uw eigen uitzonderingen definiëren. U kunt door de gebruiker gedefinieerde uitzonderingsklassen verkrijgen via de ApplicationException-klasse. Laten we dit illustreren met een voorbeeld:

Voorbeeld van door de gebruiker gedefinieerde uitzondering in VB.Net

Hier volgt een voorbeeld van een door de gebruiker gedefinieerde uitzondering in VB.Net:

Stap 1) Maak een nieuwe consoletoepassing.

Stap 2) Gebruik de volgende code:

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

Stap 3) Klik op de Start-knop in de bovenste balk om de code uit te voeren. U zou de volgende uitvoer moeten krijgen:

Het bericht HeightIsZeroException, een door de gebruiker gedefinieerde uitzondering in VB.Net, wordt op de console afgedrukt.

Hier is een screenshot van de code:

Voorbeeldcode voor een door de gebruiker gedefinieerde uitzonderingsklasse in VB.Net in Visual Studio.

Uitleg van Code:

  1. Een module maken met de naam Module1.
  2. Een uitzonderingsklasse maken met de naam HeightIsZeroException. De klasse neemt de volledige klasse ApplicationException over.
  3. Een subprocedure maken met de naam Nieuw. Er is één stringargument nodig met de naam tekst.
  4. De constructor van de basisklasse aanroepen en het bovenstaande argument doorgeven.
  5. Einde van de Nieuwe subprocedure.
  6. Einde van de klasse HeightIsZeroException.
  7. Een klasse maken met de naam Hoogte. De modifier voor openbare toegang is Openbaar, wat betekent dat deze openbaar toegankelijk zal zijn.
  8. Een integer-variabele met de naam Height maken en de waarde ervan initialiseren op 0.
  9. Een subprocedure maken met de naam showHeight().
  10. Controleren of de waarde van de variabele Hoogte 0 is. We hebben de voorwaarde If…Then gebruikt.
  11. Om de HeightIsZeroException te genereren als de bovenstaande voorwaarde waar is. Het bericht Zero Height Found wordt weergegeven wanneer deze uitzondering wordt gegenereerd.
  12. Het Else-gedeelte dat moet worden uitgevoerd als de If-voorwaarde niet waar is.
  13. Bericht dat op de console moet worden afgedrukt en waarin de hoogte wordt weergegeven wanneer deze niet 0 is.
  14. Einde van de If-voorwaarde.
  15. Einde van de subprocedure showHeight().
  16. Einde van de les Hoogte.
  17. Start van de hoofdsubprocedure.
  18. Een object met de naam Height maken als een exemplaar van de klasse Height.
  19. Begin van het uitzonderingsafhandelingsblok.
  20. De subprocedure showHeight() van de klasse Height wordt aangeroepen. We hebben een object van deze klasse gebruikt om deze methode te benaderen. Deze regel kan een uitzondering veroorzaken. Daarom hebben we deze regel omgeven met code voor foutafhandeling.
  21. Het opvangen van de HeightIsZeroException-uitzondering als object ex voor het geval deze zich voordoet.
  22. Het bericht dat op de console moet worden afgedrukt wanneer de HeightIsZeroException wordt opgevangen.
  23. Einde van het uitzonderingsafhandelingsblok.
  24. Pauzeer het consolevenster, wachtend tot een gebruiker actie onderneemt om het te sluiten.
  25. Einde van de hoofdsubprocedure.
  26. Einde van de module.

Gooi een uitzondering in VB.Net

Bij het afhandelen van uitzonderingen kunt u ervoor kiezen een object te gooien. Dit object moet echter direct of indirect afgeleid zijn van de klasse System.Exception. Bijvoorbeeld:

Voorbeeld van een throw-uitzondering in VB.Net

Hieronder volgt een voorbeeld van het gooien van een uitzondering in VB.Net:

Stap 1) Maak een nieuwe consoletoepassing.

Stap 2) Gebruik de volgende code:

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

Stap 3) Klik op de Start-knop in de bovenste balk om de code uit te voeren. U zou het volgende moeten krijgen:

De console-uitvoer van de VB.Net Throw-instructie toont het aangepaste uitzonderingsbericht.

Hier is een screenshot van de code:

Voorbeeldcode voor het gooien van een uitzondering in VB.Net met Try Catch Finally.

Uitleg van Code:

  1. Een module maken met de naam Module1.
  2. Start van de hoofdsubprocedure.
  3. Begin van de foutafhandelingscode.
  4. Een uitzonderingsobject gooien. Deze code kan een uitzondering genereren, daarom hebben we het omgeven met een Try/Catch-blok.
  5. Een uitzondering opvangen als object ex als de regel een uitzondering genereert.
  6. Het uitzonderingsbericht afdrukken op de console voor het geval dit zich voordoet.
  7. Het Eindelijk-blok dat moet worden uitgevoerd, ongeacht of er een uitzondering wordt opgevangen of niet.
  8. Het bericht dat op de console moet worden afgedrukt wanneer het blok Eindelijk wordt uitgevoerd.
  9. Einde van de uitzonderingsverwerkingscode.
  10. Pauzeer de console een tijdje en wacht tot een gebruiker actie onderneemt om deze te sluiten.
  11. Einde van de hoofdsubprocedure.
  12. Einde van de module.

Veelgestelde vragen

Ja. Een `try`-statement is geldig zonder `catch` zolang het een `finally`-blok bevat. Deze `try-finally`-structuur voert opschooncode uit, maar behandelt de uitzondering zelf niet.

Ja. Geef een lijst van verschillende Catch-blokken om verschillende soorten uitzonderingen af ​​te handelen. Rangschik ze van meest specifiek naar minst specifiek, omdat VB.Net ze in volgorde controleert en de eerste overeenkomst gebruikt.

Vrijwel altijd. De functie wordt uiteindelijk uitgevoerd, ongeacht of een uitzondering wordt opgevangen of niet, en zelfs na een Return. Deze functie wordt alleen overgeslagen bij een End-instructie of een StackOverflowException.

Throw gooit de huidige uitzondering opnieuw op en behoudt de oorspronkelijke stack. trace. Het gooien van ex reset de stack trace naar de huidige regel, waardoor wordt verborgen waar de fout werkelijk is begonnen. Gebruik liever gewoon Throw.

Een syntaxfout wordt door de compiler onderschept voordat het programma wordt uitgevoerd. Een uitzondering treedt op tijdens de uitvoering en kan worden afgehandeld met een try-catch-blok.

Veelvoorkomende uitzonderingen zijn onder andere DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException en OverflowException. Ze erven allemaal van System.Exception en kunnen afzonderlijk worden opgevangen.

Ja. GitHub-copiloot Zet een eenvoudige Engelse opmerking om in een volledig Try Catch Finally-blok en suggereert het juiste uitzonderingstype. Controleer altijd de gegenereerde handler.

Ja. Visual Studio IntellectueelCode Biedt contextbewuste, volledige regelafsluitingen voor Catch-clausules en uitzonderingstypen, gebaseerd op kennis uit duizenden open-sourceprojecten.

Vat dit bericht samen met: