Visual Basic 2005 Coach



Dovnload 477.64 Kb.
Pagina13/13
Datum20.08.2016
Grootte477.64 Kb.
1   ...   5   6   7   8   9   10   11   12   13

9.5. Nieuwe sleutelwoorden – Using, IsNot, Continue, Global

Sleutelwoorden vormen de hoeksteen van een taal en bepalen voor een groot deel de rijkheid van de taal. Ook in Visual Basic 2005 zijn een aantal nieuwe sleutelwoorden toegevoegd om u het leven gemakkelijker te maken. Een overzicht.



9.5.1. Using

In de wereld van .NET wordt geheugen automatisch beheerd door een zogenaamde garbage collector. Daardoor is het niet duidelijk en zelfs onvoorspelbaar wanneer een object dat niet meer gebruikt wordt, opgeruimd wordt. Dit is uiteraard problematisch als gebruikte bronnen dienen gesloten te worden van zodra het object niet meer nodig is, denk bijvoorbeeld aan het sleuten van een bestand of een stream na gebruik. Daartoe bezit het .NET Framework sinds dag één een standaard pattern, genaamd IDisposable, om dergelijke clean-up uit te voeren. IDisposable is een interface die één methode bevat, met name:


Public Interface IDisposable

Sub Dispose()

End Interface
Voor kritische bronnen, zoals bestanden of objecten met onderliggende handles, is de methode Dispose verondersteld deze bronnen netjes te sluiten. Van in den beginne bezit C# een taalconstructie om het werken met een dergelijk object eenvoudiger te maken:
using(FileStream fs = new FileStream(...))

{

//Gebruik de FileStream hier



}
Nadat het using-blok verlaten wordt, zal het systeem automatisch de methode Dispose oproepen op het fs-object, wat mogelijk is vermits FileStream de interface IDisposable implementeert. Ongeacht onder welke conditie het blok verlaten wordt, zal de stream netjes gesloten worden. In pre-2005 tijden moesten Visual Basic ontwikkelaars volgende code schrijven om het equivalente resultaat te bekomen:
Dim fs As New IO.FileStream("c:\demo.txt", IO.FileMode.OpenOrCreate)

Try


'Gebruik de FileStream hier

Finally


If Not fs Is Nothing Then fs.Dispose()

End Try
In deze code is het Finally-blok cruciaal om te garanderen dat de stream onder alle omstandigheden – inclusief foutcondities – gesloten wordt. Vaak werden dergelijke situaties over het hoofd gezien met alle negatieve gevolgen vandien.


In Visual Basic 2005 maakt het Using-blok nu deel uit van de dagelijkse gereedschapskist voor ontwikkelaars, wat er als volgt uitziet:
Using fs As New IO.FileStream("c:\demo.txt", IO.FileMode.OpenOrCreate)

'Gebruik de FileStream hier

End Using
wat de leesbaarheid van het programma ten goede komt en ongelukken vermijdt.

9.5.2. IsNot

In de vorige sectie werd het volgende stukje code gebruikt om het Using-blok te introduceren:


If Not fs Is Nothing Then fs.Dispose()
De veelvoorkomende constructie If Not fs Is Nothing vormt een kleine breinbreker die eerder kunstmatig lijkt. Dubbele negaties in een niet voordehandliggende volgorde is om moeilijkheden vragen en vermindert de leesbaarheid van de code. Daarom introduceert Visual Basic 2005 het nieuwe sleutelwoord IsNot:
If eenObject IsNot Nothing Then

'Doe iets

End If

9.5.3. Continue

In lusconstructies gebeurt het vaak dat in het corpus van de lus besloten wordt om naar de volgende iteratie over te gaan, bijvoorbeeld op basis van een bepaalde beslissingsstructuur. Vroeger zag dergelijke code er als volgt uit:


Do While (conditie)

'Code, code, code

If andereConditie Then

'huidige iteratie overslaan

GoTo skip

Else


'doe iets nuttigs

End If


skip:

Loop
Ook voor For-lussen, For Each-lussen en While-lussen is een dergelijke constructie vaak schering en inslag. Hoewel in sommige gevallen de lus herschreven kan worden zonder Goto-statement:


Do While (conditie)

'Code, code, code

If Not andereConditie Then

'doe iets nuttigs

End If

Loop
is zoiets in het algemene geval niet steeds mogelijk, in het bijzonder bij complexe geneste beslissingsstructuren. Vermits For in de computerwetenschappen algemeen erkend wordt als “slechte stijl” en een “te vermijden kwaad” dat historisch zijn weg gebaand heeft tot hedendaagse talen, komt Visual Basic 2005 op de proppen met een nieuw sleutelwoord dat speciaal bedoeld is voor het overslaan van een lusiteratie:


Do While (conditie)

'Code, code, code

If andereConditie Then

'huidige iteratie overslaan

Continue Do

Else


'doe iets nuttigs

End If


Loop
Vanzelfsprekend zijn ook de combinaties Continue For en Continue While van de partij. Met de komst van het sleutelwoord Continue lijkt het doodvonnis van Goto in Visual Basic voorgoed getekend. Persoonlijk voel ik al nieuwe heroïsche verhalen opborrelen over de goede (?) oude (!) tijd met (die verdomde) lijnnummering in GWBASIC.

9.5.4. Global

Om orde te scheppen in het grote aantal gedefinieerde klassen en dergelijke gebruikt .NET zogenaamde namespaces of naamruimten, wat leidt tot een hiërarchische structuur. Zo vindt men bijvoorbeeld de klasse Console terug in de namespace System en de klasse StringBuilder onder System.Text. Via het sleutelwoord Namespace kunt u overigens zelf dergelijke namespaces creëren om uw eigen zaken logisch te ordenen. Daarbij is het echter mogelijk dat de ingebouwde namespaces van het .NET Framework verborgen worden:


Namespace MijnNamespace

Namespace System

Class GlobalDemo

Function DoeIets() As System.Int32

Dim n As System.Int32

Return n


End Function

End Class

End Namespace

End Namespace


Wanneer u deze code ingeeft in Visual Basic 2005 wordt System.Int32 met rood onderstreept om aan te geven dat de namespace System die bedoeld wordt, is verborgen door de definitie van een eigen namespace MijnNamespace.System:

Hiermee ziet u ook meteen hoe de “smart tags” in Visual Studio 2005 u het leven als ontwikkelaar eenvoudiger maken. De resulterende code gebruikt het sleutelwoord Global om uit het isolement van eigen namespaces te breken en de ingebouwde namespaces zoals System.* maar ook Microsoft.* terug bereikbaar te maken:
Namespace MijnNamespace

Namespace System

Class GlobalDemo

Function DoeIets() As Global.System.Int32

Dim n As Global.System.Int32

Return n


End Function

End Class

End Namespace

End Namespace




9.6. My

De My namespace is een nieuwe exclusiviteit voor Visual Basic 2005 ontwikkelaars en laat toe om snel aan veelvoorkomende zaken te geraken zonder massa’s code te moeten schrijven die soms niet voordehandliggend is. Via My kunt aan volgende zaken:




9.6.1. My.Computer

Laten we bijvoorbeeld even proberen een geluid af te spelen met één lijn code:


Module Module1
Sub Main()

My.Computer.Audio.Play("C:\Windows\Media\Windows XP Startup.wav")

Console.ReadLine()

End Sub
End Module


De beste manier om de My namespace te leren kennen, is via het gebruik van IntelliSense in Visual Studio 2005. Heel wat zaken die voorheen moeilijk te vinden waren, zijn nu ondergebracht in deze namespace.

9.6.2. My.WebServices, My.Settings en My.Forms

My gaat echter nog een stapje verder door ook dynamische toegang te bieden tot zaken die projectspecifiek zijn. Zo kunt u via My.WebServices bijvoorbeeld aan alle webservices (proxies) die in het project zijn gedefinieerd. My.Settings mapt op de gedefinieerd instellingen via de projecteigenschappen:



De instelling “Naam” werd gedefinieerd onder de “Settings”-tab van “My Project”:

Al deze instellingen worden – hetzij applicatie-, hetzij gebruikersspecifiek – opgeslagen door het systeem. Via code kunt u gemakkelijk bij de instellingen via de My namespace. Maar er is meer, in Windows Forms applicaties kunt u properties van om het even welk formulier of control automatisch laten binden aan een setting. Een voorbeeld:


  1. Open een formulier in een Visual Basic 2005 Windows Application project.

  2. Onder “Properties” gaat u naar Data – (ApplicationSettings) – (PropertyBinding). Bij het klikken op ... verschijnt het dialoogvenster “Application Settings for ‘Form1’”:





  3. Selecteer de property Location en klik vervolgens op New:





  4. Geef de instelling een goede naam en selecteer de “Scope” (User of Application):





  5. Klik een paar keer op OK en compileer de applicatie.

  6. Voer de applicatie nu uit. Het formulier verschijnt ergens op het scherm. Verplaats het en sluit de applicatie. Start de applicatie opnieuw op en ... het formulier staat weer waar het de vorige keer stond!


Noot: Gebruikersinstellingen worden bijgehouden in een XML-bestand user.config in de map %userprofile%\Local Settings\Application Data:










764, 214








Via My.Forms tenslotte heeft u toegang tot alle formulieren die in het (Windows Forms) project zijn gedefinieerd. Deze collectie wordt ook dynamisch opgebouwd terwijl u aan het werken bent in de Visual Studio 2005 IDE.

9.6.3. My.Resources

Om te besluiten m.b.t. de My namespace nemen we een kijkje op My.Resources. Ook dit is een dynamische collectie die alle gedefinieerde resources reflecteert. Deze resources worden tevens onder de “My Project” instellingen beheerd:



Via deze collectie kunnen diverse soorten resources worden toegevoegd, gaande van strings over afbeeldingen en geluidjes tot volledige bestanden (bijvoorbeeld een Excel-werkblad met een sjabloon dat door de applicatie verder wordt ingevuld tijdens uitvoering):

Deze resources zijn vervolgens toegankelijk via de My.Resources collectie via code op een sterk getypeerde manier:


Zo zou u bijvoorbeeld volgende code kunnen schrijven:
MessageBox.Show(My.Resources.Foutmelding, "MySettingsDemo", _

MessageBoxButtons.OK, MessageBoxIcon.Error)


om volgende foutmelding – met gelokaliseerde foutmelding – weer te geven:

Figuren gedefinieerd in resources kunnen bijvoorbeeld worden weergeven met behulp van een PictureBox control op een Windows Form:

Merk op dat de Visual Studio 2005 Designer voor Windows Forms “quick tasks” ondersteunt die veelvoorkomende taken voor controls snel toegankelijk maakt, in dit geval de taak “Choose Image” voor een PictureBox control. Via dit dialoogvenster zijn de resources van het juiste type direct toegankelijk (met excuses voor de griezelige afbeelding):


9.7. Een paar nieuwe types

Visual Basic 2005 bevat 4 nieuwe ingebouwde datatypes, met name SByte, UShort, UInteger en ULong. Hoewel deze types reeds eerder bestonden in het .NET Framework kwamen deze niet eerder aan de vlakte in Visual Basic. In Visual Basic 2005 verandert dit dus:




  • SByte stelt een signed byte voor, met bereik van -127 tot 128.

  • UShort stelt een unsigned short voor, met bereik van 0 tot 216 – 1 (65535).

  • UInteger stelt een unsigned integer voor, met bereik van 0 tot 232 – 1 (4.294.967.295).

  • ULong stelt een unsigned long voor, met bereik van 0 tot 264 – 1 (~ 1.8 1019).


Noot: Al deze types zijn niet CLS-compliant. U kunt het gebruik ervan dus beter beperken tot de interne keuken van uw eigen projecten en niet voor datauitwisseling met andere talen. CLS staat voor Common Language Specification en is een set van regels waaraan code moet voldoen wil ze naadloos kunnen samenwerken met code uit andere talen. Vermits de hierboven vermelde types geen deel uitmaken van de CLS is het mogelijk dat uitwisseling van data van deze types met een andere taal niet werk.

9.8. XML commentaar

Reeds in C# versie 1.0 was er ondersteuning voor het schrijven van commentaar bij klassen, members en dergelijke met behulp van XML-syntax. Dit ziet er bijvoorbeeld als volgt uit:


///

/// Biedt ondersteuning voor allerhande berekeningen.

///

public class GroteRekenaar

{

///



/// Berekent de som van twee getallen.

///

///
Eerste term van de som.

///
Tweede term van de som.


/// De som van beide opgegeven termen.

public static int Som(int a, int b)

{

}



}
Door dergelijke XML-gebaseerde commentaar te schrijven wordt het mogelijk een XML-bestand met informatie over de gedefinieerde types e.d. te laten uitvoeren door de compiler. In combinatie met een XSLT stylesheet kan dan documentatie gegenereerd worden, bijvoorbeeld in HTML.
In Visual Basic 2005 wordt XML-commentaar vooraf gegaan door ''', boven de klasse of de member waarvoor documentatie geschreven dient te worden. Veronderstel volgende code:
Public Class Commentaar
End Class
Om commentaar in te voeren bij de klasse, typ je gewoon ''' boven de declaratie van de klasse. Daardoor verschijnt volgend skelet:
'''

'''


'''

'''

Public Class Commentaar

Public Sub DoeIets(ByVal naam As String)

End Sub

End Class


Daarna vult u deze in met de nodige uitleg bij het type. Verder kunnen bijvoorbeeld extra opmerkingen onder geplaatst worden. Voor een procedure ziet de commentaar er als volgt uit:
'''

'''


'''

'''


'''

Public Sub DoeIets(ByVal naam As String)

End Sub
met extra commentaar voor elke individuele parameter. En zo kan je nog een tijdje doorgaan, bijvoorbeeld met functies om te besluiten:
'''

'''


'''

'''


'''

'''

'''

Public Function Som(ByVal a As Integer, ByVal b As Integer) As Integer



End Function
waarbij ook informatie over de geretourneerde waarde (of object) wordt opgegeven. Merk ook op dat voor het schrijven van de XML-commentaren IntelliSense aangeboden wordt:

Het is aan te bevelen minstens alle publieke (en protected) types en members van dergelijke commentaar te voorzien. Op die manier maakt u niet alleen het leven van ontwikkelaars eenvoudiger door het geheel verstaanbaarder te maken maar opent u ook de deur voor hergebruik van de geschreven libraries door derde partijen. En vanzelfsprekend verhoogt ook de onderhoudbaarheid door het schrijven van goede glasheldere commentaar.
Om de XML-documenatie te laten genereren (wat standaard gebeurt), kunt u terecht onder de My Project settings, tabblad Compile waar u een vinkje terugvindt luisterend naar de naam “Generate XML documentation file”:

In de bin\Debug (of bin\Release afhankelijk van de configuratie) uitvoermap vindt u dan een bestand .xml terug:

waarin alle commentaren prijken. Aan u om te beslissen wat u ermee aanvangt, zoals het omzetten naar HTML documentatie door middel van een XSLT. Voorbeelden van dergelijke transformaties zijn te vinden op het internet.


1   ...   5   6   7   8   9   10   11   12   13


De database wordt beschermd door het auteursrecht ©opleid.info 2017
stuur bericht

    Hoofdpagina