Erandite käsitlemine VB.Netis (proovige Catchi)

⚡ Nutikas kokkuvõte

VB.Neti erandite käsitlemine haldab käitusaja vigu, näiteks nulliga jagamist, märksõnade Try, Catch, Finally ja Throw abil, et programm saaks probleemidele graatsiliselt reageerida, selle asemel et täitmise ajal krahhida.

  • 🔍 Erand: Probleem, mis tekib täitmise ajal, näiteks arvu jagamine nulliga.
  • 🛡️ Proovi ja püüa kinni: Try mähib riskantse koodi; Catch tegeleb erandiga, mille see tekitab.
  • Lõpuks: Blokk Finally käivitub olenemata sellest, kas esineb erand või mitte.
  • 🚦 Viska: Throw käivitab System.Exception klassist tuletatud erandobjekti.
  • 🧩 Kohandatud erandid: Oma erandite tüüpide määratlemiseks päri ApplicationException.
  • 🤖 Tehisintellekti abi: GitHub Copilot ja IntelliCode genereerige tippimise ajal Try Catchi plokke.

Erandite käsitlemine VB.Netis

Mis on VB.Neti erand?

An Erand VB.Netis viitab probleemile, mis tekib programmi täitmise ajal. Selle põhjustab ootamatu asjaolu. Hea näide on see, kui teete jagamisoperatsiooni ja jagate seejärel nulliga (0). Esitatakse erand.

Mis on VB.Neti erandite käsitlemine?

Koos eranditega VB.Net, saate programmi juhtimise ühelt osalt teisele üle kanda. VB.Netis käsitletakse erandeid nelja järgmise märksõna abil:

Võtmesõna detail
Püüdma Prooviploki ülesanne on tuvastada koodiplokk, mille jaoks konkreetne erand aktiveeritakse. Sellele peaks järgnema püüdmisplokk(id).
maadlus Selles plokis tehakse erandi püüdmine. See on erandikäsitleja, milles käsitletakse erandit.
Lõpuks Kasutage plokki Lõpuks, et käivitada lausete komplekt, olenemata sellest, kas erand on toimunud või mitte.
Viskama Erand tehakse pärast probleemi ilmnemist. See on märksõna Viska töö.

Kui nende nelja märksõna rollid on selged, mõelge, kuidas need ühes lauses kombineeruvad.

Proovi püüdmise süntaks VB.Netis

VB.Neti proovi püüdmise avaldused on määratletud järgmise süntaksi abil:

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

Proovi/püüa plokk peaks ümbritsema koodi, mis võib tekitada erandi. Seda koodi tuntakse kaitstud koodina. Kui teil on vaja tabada erinevat tüüpi erandeid, saate kasutada mitut püüdmislauset.

Erandi käsitlemise näide VB.Netis rakendusega Try Catch ja Lõpuks

Try/Catch lausete abil saate oma tavalise programmikoodi veakäsitlussüsteemist eraldada. Näitame, kuidas erandiga toime tulla märksõnade Try, Catch ja Finally abil.

Step 1) Looge uus konsoolirakendus.

Step 2) Kasutage seda koodi:

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

Step 3) Koodi käivitamiseks klõpsake tööriistaribal nuppu Start. Peaksite saama järgmise väljundi:

VB.Net Proovi Catch Finally konsooli väljundit, mis näitab püütud DivideByZeroExceptioni

Siin on koodi ekraanipilt:

VB.Net Try Catch Finally näidiskood Visual Studios

Selgitus Code:

  1. Mooduli Module1 loomine.
  2. Alamprotseduuri nimega divisionFunction loomine kahe täisarvu argumendiga n1 ja n2. ByVal on VB.Neti märksõna, mis ütleb, et argumentide väärtused edastatakse väärtuste kaupa.
  3. Vastuse nimelise täisarvulise muutuja loomine.
  4. Proovi/Püüa ploki algus. Peame ümbritsema koodi, mis meie arvates võib selle plokiga erandi tekitada.
  5. Muutujate n1 ja n2 väärtuste vahel jagamistehte sooritamine. Jagamistehte tulemus omistatakse muutuja vastusele. See kood võib tekitada erandi, näiteks kui jagame arvu nulliga, seega oleme selle ümbritsenud proovi/püüa plokkidega.
  6. Erandi nimega DivideByZeroException püüdmine ja genereeritud erandisõnumi määramine eks.
  7. Teatava teksti printimine konsoolile, et teavitada kasutajat tõstatatud erandi tüübist/nimest.
  8. Lõpuks plokk. See toimib olenemata sellest, kas erand tabatakse või mitte.
  9. Konsoolile mõne teksti trükkimine, mis näitab jagamise operatsiooni tulemust.
  10. Proovi ploki lõpp, st veatöötluskoodi lõpp.
  11. Jaotuse lõpp Funktsiooni alamprotseduur.
  12. Põhilise alamprotseduuri algus.
  13. DivisionFunctioni alamprotseduuri kutsumine/väljakutsumine. Siin edastatakse kahe täisarvu argumendi väärtused. Väärtus n1=4 ja n2=0. See tähendab, et jagamistehte on 4\0, st n1\n2.
  14. Konsooliakna peatamine, oodates, kuni kasutaja selle sulgemiseks midagi ette võtab.
  15. Peamise alamprotseduuri lõpp.
  16. Mooduli lõpp.

Kasutaja määratud erandid VB.Netis

VB.Net võimaldab teil ise erandeid defineerida. Kasutaja defineeritud erandite klasse saab hankida klassist ApplicationException. Näidame seda näite abil:

VB.Neti kasutaja määratud erandi näide

Siin on näide kasutaja määratletud erandist VB.Netis:

Step 1) Looge uus konsoolirakendus.

Step 2) Kasutage järgmist koodi:

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

Step 3) Koodi käivitamiseks klõpsake ülemisel ribal nuppu Start. Peaksite saama järgmise väljundi:

VB.Neti kasutaja määratletud HeightIsZeroException teade prinditakse konsoolile

Siin on koodi ekraanipilt:

VB.Neti kasutaja määratletud erandiklassi näidiskood Visual Studios

Selgitus Code:

  1. Mooduli Module1 loomine.
  2. Erandiklassi loomine nimega HeightIsZeroException. Klass pärib kogu ApplicationException klassi.
  3. Alamprotseduuri loomine nimega Uus. See võtab ühe stringargumendi nimega tekst.
  4. Põhiklassi konstruktori kutsumine ja sellele ülaltoodud argumendi edastamine.
  5. Uue alamprotseduuri lõpp.
  6. HeightIsZeroException klassi lõpp.
  7. Klassi loomine nimega Kõrgus. Selle avaliku juurdepääsu muutja on Avalik, mis tähendab, et see on avalikult juurdepääsetav.
  8. Täisarvulise muutuja nimega Height loomine ja selle väärtuse lähtestamine 0-ks.
  9. Alamprotseduuri nimega showHeight() loomine.
  10. Kontrollitakse, millal muutuja Height väärtus on 0. Oleme kasutanud tingimust If…Then.
  11. HeightIsZeroExceptioni väljajätmiseks, kui ülaltoodud tingimus on tõsi. Selle erandi korral kuvatakse teade Nullkõrgus leitud.
  12. Else osa, mis tuleb täita, kui tingimus If ei ole tõene.
  13. Konsoolile prinditav teade, mis näitab kõrgust, kui see ei ole 0.
  14. Kui tingimuse lõpp.
  15. ShowHeight() alamprotseduuri lõpp.
  16. Klassi lõpp Kõrgus.
  17. Põhilise alamprotseduuri algus.
  18. Objekti nimega Kõrgus loomine Height klassi eksemplarina.
  19. Erandi käsitlemise ploki algus.
  20. Kutsutakse välja Height klassis defineeritud alamprotseduur showHeight(). Oleme sellele meetodile juurdepääsuks kasutanud selle klassi objekti. See rida võib põhjustada erandi. Seetõttu oleme selle ümbritsenud erandite käsitlemise koodiga.
  21. Erandi HeightIsZeroException püüdmine objektina ex juhul, kui see juhtub.
  22. Teade, mis tuleb HeightIsZeroExceptioni kinnipidamisel konsoolile printida.
  23. Erandi käsitlemise ploki lõpp.
  24. Peatage konsooliaken, oodates, kuni kasutaja selle sulgemiseks midagi teeb.
  25. Peamise alamprotseduuri lõpp.
  26. Mooduli lõpp.

Viska erand VB.Neti

Erandite käsitlemisel saate valida objekti viskamise. Objekt peab aga pärinema System.Exception klassist, otseselt või kaudselt. Näiteks:

VB.Neti viskamise erandi näide

Allpool on näide VB.Neti viskeerandist:

Step 1) Looge uus konsoolirakendus.

Step 2) Kasutage järgmist koodi:

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

Step 3) Koodi käivitamiseks klõpsake ülemisel ribal nuppu Start. Peaksite saama järgmise:

VB.Net Throw lause konsooli väljund, mis näitab kohandatud eranditeadet

Siin on koodi ekraanipilt:

VB.Net Throw erandi näidiskood Try Catch Finally abil

Selgitus Code:

  1. Mooduli Module1 loomine.
  2. Põhilise alamprotseduuri algus.
  3. Veatöötluskoodi algus.
  4. Erandobjekti viskamine. See kood võib tekitada erandi, mistõttu oleme selle ümbritsenud proovi/püüdmise blokiga.
  5. Erandi püüdmine objektina ex, kui joon viskab erandi.
  6. Eranditeate printimine konsoolile juhuks, kui see juhtub.
  7. Lõplik plokk käivitamiseks olenemata sellest, kas erand tabatakse või mitte.
  8. Teade, mis tuleb konsoolile printida, kui plokk Lõpuks käivitatakse.
  9. Erandite käsitlemise koodi lõpp.
  10. Peatage konsool mõneks ajaks, oodates, kuni kasutaja selle sulgemiseks midagi teeb.
  11. Peamise alamprotseduuri lõpp.
  12. Mooduli lõpp.

KKK

Jah. Try-lause kehtib ilma Catchita, kui see sisaldab Finally plokki. See Try Finally vorm käivitab puhastuskoodi, kuid ei käsitle erandit ennast.

Jah. Loetle mitu püügiplokki erinevat tüüpi erandite käsitlemiseks. Järjesta need kõige spetsiifilisemast kõige vähem spetsiifilisemani, sest VB.Net kontrollib neid järjekorras ja kasutab esimest vastet.

Peaaegu alati. Käivitub lõpuks olenemata sellest, kas erand tabati või mitte, ja isegi pärast Return-käsku. See jäetakse vahele ainult End-lause või StackOverflowException-käsu korral.

Throw käivitab praeguse erandi uuesti ja säilitab selle algse pinu. trace. Throw ex lähtestab pinu trace praegusele reale, peites vea tegeliku alguse koha. Eelista tavalist käsku Throw.

Kompilaator püüab süntaksivea kinni enne programmi käivitamist. Erand tekib käitusajal, täitmise ajal ja seda saab käsitleda Try Catch plokiga.

Sagedasemate näideteks on DivideByZeroException, NullReferenceException, IndexOutOfRangeException, FormatException ja OverflowException. Kõik need pärinevad System.Exception'ilt ja neid saab eraldi püüda.

Jah. GitHubi koopia muudab lihtsa inglise keele kommentaari täielikuks „Try Catch Finally” plokiks ja pakub välja õige erandi tüübi. Vaadake alati üle genereeritud käitleja.

Jah. Visual Studio InteliCode pakub kontekstipõhiseid, terve rea täiendusi Catch-klauslitele ja eranditüüpidele, mida on õpitud tuhandetest avatud lähtekoodiga projektidest.

Võta see postitus kokku järgmiselt: