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 -
[email protected]
My namespace ‘speed dial’ en dynamic types My Application — Productnaam, versie, omschrijving … Computer
— Registry, audio, bestandssysteem, …
User
— Gebruikersnaam, groepen, rollen, …
Resources — Benader resources: afbeeldingen, teksten… Settings
— Gebruikers- en applicatie-instellingen (.config)
Forms
— Collectie van de formulieren binnen het project
WebServices — Collectie van de gerefereerde webservice(s)
My.Application My.Application Eigenschappen van de applicatie binnen handbereik Aantal methoden beschikbaar, zoals:
ChangeCulture, Run etc.
Meer invloed op het ‘application framework’.
Info.Title Info.Version
CommandLineArgs Log
Dim strBedrijfsnaam As String Dim blnClickOnce As Boolean
With My.Application strBedrijfsnaam =.Info.CompanyName blnClickOnce = .IsNetworkDeployed End With
WorkingDirectory (UI) Culture …
My.Computer
Geeft toegang tot eigenschappen van de computer, de hardware en eventueel aangesloten randapparatuur
My.Computer Mouse
Audio Network
Dim intVrijGeheugen As Integer Dim strComputerNaam As String With My.Computer ' Zet tekst op het klembord .Clipboard.SetText(“www.VBcentral.nl") intVrijGeheugen = .Info.AvailablePhysicalMemory strComputerNaam = .Name End With
Registry 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 – Dynamic Types de compiler aan het werk…
My.Resources
My.Settings
Me.Location = My.Settings.LocationFormMain
My.Forms
picLogo.Image = My.Resources.LogoVBcentral
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 Willem.config
MijnProgramma.exe.config
Marieke.config Andre.config
<ApplicationSettings> …
<UserSettings> …
My.Settings
Laden – Application/User 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
Maak een ‘strongly typed’ collectieklasse met slechts één regel code
System.Collections.Generic
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 Add(objElement Dim Public intListSub As New ArrayList()As Object) ‘Indien nodig maak array groter mintCount += 1 ‘Argument wordt geboxed intList.Add(1) mobjElementen(mintCount-1) = objElement intList.Add(2) ‘Argument wordt geboxed End Sub intList.Add(“Drie”) ‘Moet exception genereren ReadOnly Property Count() As Integer Dim Public intGetal As Integer = CType(intList(0), Integer) Get Return mintCount End Get End Property End Class
‘Cast!
Generics voorbeeld met generics… Public Class List(Of ItemType) Private mobjElementen() As ItemType Private mintCount As Integer Add(objElement AsInteger) ItemType) Dim Public intListSub As New ArrayList(Of ‘Indien nodig maak array groter mintCount += 1 ‘Geen boxing intList.Add(1) mobjElementen(mintCount-1) intList.Add(2) ‘Geen boxing= objElement End Sub intList.Add(“Drie”) ‘Compile-time error ReadOnly Property Count() As Integer Dim Public intGetal As Integer = intList(0) ‘Geen casting! Get Return mintCount End Get End Property End Class
Generics
Controle tijdens het compileren
Betere performance
Geen overhead door boxing en casting
Code eenvoudiger te hergebruiken
Voorkom runtime errors
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
Conversie operatoren
+, - etc. eigen klassen 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