Visual Basic 2012 Voorbeelden
   

visual basic 2012 broncode voorbeelden

Blijf op de hoogte van de recente aanpassingen op vbvoorbeelden!

Microsoft Visual Studio 2012Microsoft Developers Network - Visual BasicMicrosoft .NET Framework

15.13. Finally

Print Email Deel op Twitter Deel op Facebook

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.

Aan een Try ... End Try statementblok kan men een Finally gedeelte toevoegen.  Dit Finally blok bevat code die zeker moet worden uitgevoerd na het Try gedeelte of na het afhandelende Catch gedeelte indien een exceptie is opgetreden.

Een typische situatie waarin dit gebruikt wordt is bij het gebruik van "resources" in het Try gedeelte.  Optredende excepties worden afgehandeld in het Catch blok en de resources worden vrijgegeven in het Finally gedeelte.

Voorbeelden van dergelijke resources zijn de streamobjecten, het is hier de bedoeling een Close method aan te roepen op het streamobject indien de resource (bijvoorbeeld het bestand) waarmee het streamobject werkt mag worden vrijgegeven.

Doordat de Close method altijd moet worden aangeroepen op een streamobject nadat de nodige operaties zijn verwezelijkt plaatsen we de call naar Close in het Finally blok.  Indien geen fout optreedt in het Try gedeelte dan wordt het Finally gedeelte uitgevoerd en de stream dus gesloten.  Indien wel een exceptie optreedt zal het Catch gedeelte worden uitgevoerd en de stream dus ook worden gesloten.

Veronderstel dat we over een bestand TextFile1.txt beschikken die zich op dezelfde lokatie bevindt als de executable waarin het volgende programma wordt gebuild.
Visual Basic 2012 Broncode - Codevoorbeeld 414
Class TryFinallyExample1
    Public Shared Sub Main()
        Dim fileContent As String = GetTextFromFile("TextFile1.txt")
        Console.Write(fileContent)
        '
        Console.ReadLine()
    End Sub
    Public Shared Function GetTextFromFile(ByVal filePath As String) As String
        Dim streamReader As System.IO.StreamReader
        Try
            Console.WriteLine("Try...")
            streamReader = New System.IO.StreamReader(filePath)
            GetTextFromFile = streamReader.ReadToEnd()
        Catch ex As Exception
            Console.WriteLine("Catch...")
            Console.WriteLine("Exception occured...")
            Console.WriteLine("Message : " & ex.Message)
        Finally
            Console.WriteLine("Finally...")
            If streamReader IsNot Nothing Then streamReader.Close()
        End Try
    End Function
End Class
Tekst Bestand
This is the content of the file.
Als het bestand de hiervoor vermelde inhoud bevat dan zal vorig voorbeeld tot volgende output leiden :
Console Application Output
Try...
Finally...
This is the content of the file.
Als er iets fout loop bij het uitvoeren van de constructor van StreamReader of bij het uitvoeren van de ReadToEnd method, bijvoorbeeld indien het bestand niet wordt gevonden krijgen we volgende output :
Console Application Output
Try...
Catch...
Exception occured...
Message : Could not find file '...\TextFile1.txt'.
Finally...
Aan de output van volgend voorbeeld merk je hoe, zelfs nog voor dat de callstack wordt afgedaald om te zoeken naar een afhandelend Catch blok, toch nog eerst het Finally gedeelte wordt uitgevoerd na het Try gedeelte waarin de exceptie is opgetreden.
Visual Basic 2012 Broncode - Codevoorbeeld 415
Class TryFinallyExample2
    Public Shared Sub Main()
        Try
            Console.WriteLine("Main::Try")
            CalledMethod()
        Catch ex As Exception
            Console.WriteLine("Main::Catch")
        Finally
            Console.WriteLine("Main::Finally")
        End Try
        '
        Console.ReadLine()
    End Sub
    Public Shared Sub CalledMethod()
        Try
            Console.WriteLine("CalledMethod::Try")
            Throw New Exception
        Finally
            Console.WriteLine("CalledMethod::Finally")
        End Try
    End Sub
End Class
Console Application Output
Main::Try
CalledMethod::Try
CalledMethod::Finally
Main::Catch
Main::Finally
Duidelijk is hoe men het Finally gedeelte dus zal gebruiken om code in te plaatsen die hoe dan ook moet worden uitgevoerd nadat het Try gedeelte succesvol of onsuccesvol (bij het optreden van een exceptie) is uitgevoerd.

Dit artikel is gepubliceerd op maandag 15 oktober 2012 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.