Visual Basic 2005 nieuwe taalelementen André Obelink, MCSD, MVP Auteur, VBcentral.nl Microsoft MVP Visual Basic VP Speakers Bureau INETA Europe - www.europe.ineta.org www.vbcentral.nl - www.obelink.com - andre@obelink.com
My namespace speed dial en dynamic types My Application Computer User Resources Settings Forms WebServices Productnaam, versie, omschrijving Registry, audio, bestandssysteem, Gebruikersnaam, groepen, rollen, Benader resources: afbeeldingen, teksten Gebruikers- en applicatie-instellingen (.config) Collectie van de formulieren binnen het project Collectie van de gerefereerde webservice(s)
My.Application Eigenschappen van de applicatie binnen handbereik Aantal methoden beschikbaar, zoals: ChangeCulture, Run etc. Meer invloed op het application framework. My.Application Info.Title Info.Version CommandLineArgs Dim strbedrijfsnaam As String Dim blnclickonce As Boolean With My.Application strbedrijfsnaam =.Info.CompanyName blnclickonce =.IsNetworkDeployed End With Log WorkingDirectory (UI) Culture
My.Computer Geeft toegang tot eigenschappen van de computer, de hardware en eventueel aangesloten randapparatuur Dim intvrijgeheugen As Integer Dim strcomputernaam As String My.Computer Mouse Audio Network Registry With My.Computer ' Zet tekst op het klembord.clipboard.settext( www.vbcentral.nl") intvrijgeheugen =.Info.AvailablePhysicalMemory strcomputernaam =.Name End With Clipboard FileSystem
My.User Geeft toegang tot eigenschappen van de huidig ingelogde gebruiker U kunt door IPrincipal en IIdentity te implementeren uw eigen authenticatiemethode maken Dim blnisbeheerder As Boolean Dim strgebruikersnaam As String With My.User blnisbeheerder =.IsInRole("Administrators") strgebruikersnaam =.Name End With My.User Login Name Domain Authentication Roles Custom Principal
My.Resources My Dynamic Types de compiler aan het werk piclogo.image = My.Resources.LogoVBcentral My.Settings Me.Location = My.Settings.LocationFormMain My.Forms My.Forms.FormMain.Show My.WebServices My.WebServices.VBcentral.Search( Obelink )
My.Resources Strongly typed toegang tot resources toegevoegd via de Resource Editor (IDE) Via de IDE meeste bestanden ook te bewerken Beheer teksten voor verschillende talen ' LogoVBcentral.png toegevoegd via Resource Editor piclogo.image = My.Resources.LogoVBcentral ' Lokaliseer teksten in UI automatisch lblcopyright.text = My.Resources.TextCopyright
My.Settings Eenvoudig opslaan van configuratie instellingen Bestand Applicatienaam.exe.config Application Scope Settings instellingen voor alle gebruikers alleen lezen bestand staat naast executable User Scope Settings instellingen per gebruiker lezen en schrijven bestand staat onder Documents and Settings
My.Settings Application Settings User Settings MijnProgramma.exe.config Willem.config Marieke.config Andre.config <ApplicationSettings> </ApplicationSettings> <UserSettings> </UserSettings>
Laden Application/User My.Settings strconnectionstring = My.Settings.MijnConnectionstring Opslaan - User My.Settings.LastUserName = obelink My.Settings.Save() Event afhandelen Settings.Designer.vb Private Sub MySettings_SettingChanging(ByVal sender As Object, ByVal e As System.Configuration.SettingChangingEventArgs) Handles Me.SettingChanging If e.settingname = "LastUserName" Then If e.newvalue IsNot "obelink" Then e.cancel = True End If End Sub
My.Forms en My.WebServices Worden ook dynamisch gegenereerd door de compiler van Visual Basic De default instance van een formulier is terug My.Forms.Form1.Show of Form1.Show Veel proxywerk wordt automatisch afgehandeld: Dim objklanten As Klanten objklanten = My.WebServices.KlantenBeheer.Load
Demo My.Settings
Generics specificieer type tijdens coderen Nieuwe namespace System.Collections.Generic Maak een strongly typed collectieklasse met slechts één regel code Inherits System.Collections.Generic.List(Of T) Maak uw eigen generic types
Generics voorbeeld zonder generics Public Class List Private mobjelementen() As Object Private mintcount As Integer Dim Public intlist Sub As New Add(objElement ArrayList() As Object) Indien nodig maak array groter intlist.add(1) mintcount += 1 Argument wordt geboxed intlist.add(2) mobjelementen(mintcount-1) Argument wordt = objelement geboxed intlist.add( Drie ) End Sub Moet exception genereren Dim Public intgetal ReadOnly As Integer Property = CType(intList(0), Count() As Integer Integer) Cast! Get Return mintcount End Get End Property End Class
Generics voorbeeld met generics Public Class List(Of ItemType) Private mobjelementen() As ItemType Private mintcount As Integer Dim Public intlist Sub As New Add(objElement ArrayList(Of As Integer) ItemType) Indien nodig maak array groter intlist.add(1) mintcount += 1 Geen intlist.add(2) mobjelementen(mintcount-1) Geen boxing= objelement intlist.add( Drie ) End Sub Compile-time error Dim Public intgetal ReadOnly As Integer Property = intlist(0) Count() As Integer Geen casting! Get Return mintcount End Get End Property End Class
Generics Controle tijdens het compileren Voorkom runtime errors Betere performance Geen overhead door boxing en casting Code eenvoudiger te hergebruiken Erg handig voor strongly typed collecties Demo! Voor een aantal structuren al voorhanden Dictionary, HashTable, List, Stack etc.
Nieuwe statements in VB2005 IsNot logische tegenhanger van Is statement Using declareer, instantieer, gebruik en ruim op Continue stap naar volgende iteratie in loop TryCast retourneert Nothing bij onmogelijk cast Global verwijs naar root namespace
IsNot Duidelijker manier om te bepalen of een object een waarde heeft of niet overeenkomt met een ander object. Voor VB2005 If Not objmijnobject Is Nothing Then. End If Met VB2005 If objmijnobject IsNot Nothing Then End If
Using Fraaie manier om alle resources te sluiten en op te ruimen. Dimensioneer en instantieer een object Using objfilestream As New FileStream(strPath, FileMode.Append) For intteller As Integer = 0 To objfilestream.length Doe iets lees byte in objfilestream.readbyte() Next End Using Sluit stream en ruim object op
Continue Werkt met For Next, Do en While lussen Lus is logischer en beter leesbaar For inta as Integer = 0 To 100 While strarray(inta) IsNot André If strarray(inta) Is Obelink Ga verder met volgende inta Continue For End If Doe iets End While Next inta
TryCast Geen Try.. Catch logica bij CType of DirectCast wanneer conversie mislukt. TryCast duidelijker leesbaar Runtime error wanneer objboek <> Product objproduct = CType(objBoek, Product) objproduct = DirectCast(objBoek, Product) TryCast retourneert Nothing wanneer objboek <> Product objproduct = TryCast(objBoek, Product) If objproduct IsNot Nothing Then Doe iets End If
Global Mogelijk om elke namespace naamconflict te voorkomen Fout indien andere namespace ook een System bevat Dim objstringbuilder1 As New System.Text.StringBuiler Maak onderscheid! Nu wel goed Dim objstringbuilder2 As New Global.System.Text.StringBuiler
Wat we niet besproken is Operator Overloading +, - etc. eigen klassen Conversie operatoren Eigen CType() Unsigned Types Property Accessor Partial Types Events op applicatieniveau
Samenvatting De beste Visual Basic ooit! Taal is compleet, volledige OO ondersteuning Datatypen komen nu overeen met andere.net talen IDE helpt mee met waarschuwingen van de compiler.
Verantwoording Een groot aantal dia s zijn gebaseerd op presentaties van Stan Schultes (MVP VB) en Amanda Silver en Steven Lees van het Microsoft Visual Basic Team
Visual Basic 2005 de basis ISBN: 9043012890 Pearson Education Benelux september 2006 in de winkel 272 pagina s / 19,95