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> … </ApplicationSettings> <UserSettings> … </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 Dim Public intListSub As Add(objElement 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 AsInteger) ItemType) Dim Public intListSub As Add(objElement 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