Visual Basic 2005 nieuwe taalelementen André Obelink, MCSD, MVP Auteur, VBcentral.nl Auteur, VBcentral.nl Microsoft MVP Visual Basic Microsoft MVP Visual Basic VP Speakers Bureau INETA Europe - VP Speakers Bureau INETA Europe
My namespace ‘speed dial’ en dynamic types — 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 Computer User Resources Settings Forms WebServices
My.Application Eigenschappen van de applicatie binnen handbereik Eigenschappen van de applicatie binnen handbereik Aantal methoden beschikbaar, zoals: Aantal methoden beschikbaar, zoals: ChangeCulture, Run etc. ChangeCulture, Run etc. Meer invloed op het ‘application framework’. Meer invloed op het ‘application framework’.My.Application Info.Title Info.Version CommandLineArgs Log WorkingDirectory (UI) Culture … Dim strBedrijfsnaam As String Dim blnClickOnce As Boolean With My.Application strBedrijfsnaam =.Info.CompanyName blnClickOnce =.IsNetworkDeployed End With
My.ComputerMy.Computer Mouse Audio Network Registry Clipboard FileSystem … Geeft toegang tot eigenschappen van de computer, de hardware en eventueel aangesloten randapparatuur Geeft toegang tot eigenschappen van de computer, de hardware en eventueel aangesloten randapparatuur Dim intVrijGeheugen As Integer Dim strComputerNaam As String With My.Computer ' Zet tekst op het klembord.Clipboard.SetText(“ intVrijGeheugen =.Info.AvailablePhysicalMemory strComputerNaam =.Name End With
My.UserMy.User Login Name Domain Authentication Roles Custom Principal … Geeft toegang tot eigenschappen van de huidig ingelogde gebruiker Geeft toegang tot eigenschappen van de huidig ingelogde gebruiker U kunt door IPrincipal en IIdentity te implementeren uw eigen authenticatiemethode maken 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 – Dynamic Types de compiler aan het werk… My.Resources My.Resources picLogo.Image = My.Resources.LogoVBcentral picLogo.Image = My.Resources.LogoVBcentral My.Settings My.Settings Me.Location = My.Settings.LocationFormMain Me.Location = My.Settings.LocationFormMain My.Forms My.Forms My.Forms.FormMain.Show My.Forms.FormMain.Show My.WebServices My.WebServices My.WebServices.VBcentral.Search(“Obelink”) My.WebServices.VBcentral.Search(“Obelink”)
My.Resources ‘Strongly typed’ toegang tot resources toegevoegd via de Resource Editor (IDE) ‘Strongly typed’ toegang tot resources toegevoegd via de Resource Editor (IDE) Via de IDE meeste bestanden ook te bewerken Via de IDE meeste bestanden ook te bewerken Beheer teksten voor verschillende talen 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 Eenvoudig opslaan van configuratie instellingen Bestand Applicatienaam.exe.config Bestand Applicatienaam.exe.config Application Scope Settings Application Scope Settings instellingen voor alle gebruikers – alleen lezen instellingen voor alle gebruikers – alleen lezen bestand staat naast executable bestand staat naast executable User Scope Settings User Scope Settings instellingen per gebruiker – lezen en schrijven instellingen per gebruiker – lezen en schrijven bestand staat onder Documents and Settings bestand staat onder Documents and Settings
My.Settings Application Settings Application Settings User Settings User Settings MijnProgramma.exe.config … Willem.config Marieke.config Andre.config …
My.Settings Laden – Application/User Laden – Application/User strConnectionString = My.Settings.MijnConnectionstring My.Settings.LastUserName = “obelink” My.Settings.Save() Opslaan - User Opslaan - User Event afhandelen – Settings.Designer.vb 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 Worden ook dynamisch gegenereerd door de compiler van Visual Basic De ‘default instance’ van een formulier is terug De ‘default instance’ van een formulier is terug My.Forms.Form1.Show of Form1.Show My.Forms.Form1.Show of Form1.Show Veel ‘proxywerk’ wordt automatisch afgehandeld: Veel ‘proxywerk’ wordt automatisch afgehandeld: Dim objKlanten As Klanten objKlanten = My.WebServices.KlantenBeheer.Load Dim objKlanten As Klanten objKlanten = My.WebServices.KlantenBeheer.Load
Demo My.Settings…
Generics specificieer type tijdens coderen… Nieuwe namespace Nieuwe namespace System.Collections.Generic System.Collections.Generic Maak een ‘strongly typed’ collectieklasse met slechts één regel code Maak een ‘strongly typed’ collectieklasse met slechts één regel code Inherits System.Collections.Generic.List(Of T) Inherits System.Collections.Generic.List(Of T) Maak uw eigen generic types Maak uw eigen generic types
Generics voorbeeld zonder generics… Public Class List Private mobjElementen() As Object Private mintCount As Integer Public Sub Add(objElement As Object) ‘Indien nodig maak array groter mintCount += 1 mobjElementen(mintCount-1) = objElement End Sub Public ReadOnly Property Count() As Integer Get Return mintCount End Get End Property End Class Dim intList As New ArrayList() intList.Add(1) ‘Argument wordt geboxed intList.Add(2) ‘Argument wordt geboxed intList.Add(“Drie”) ‘Moet exception genereren Dim intGetal As Integer = CType(intList(0), Integer) ‘Cast!
Public Class List(Of ItemType) Private mobjElementen() As ItemType Private mintCount As Integer Public Sub Add(objElement As ItemType) ‘Indien nodig maak array groter mintCount += 1 mobjElementen(mintCount-1) = objElement End Sub Public ReadOnly Property Count() As Integer Get Return mintCount End Get End Property End Class Generics voorbeeld met generics… Dim intList As New ArrayList(Of Integer) intList.Add(1) ‘Geen boxing intList.Add(2) ‘Geen boxing intList.Add(“Drie”) ‘Compile-time error Dim intGetal As Integer = intList(0) ‘Geen casting!
Generics Controle tijdens het compileren Controle tijdens het compileren Voorkom runtime errors Voorkom runtime errors Betere performance Betere performance Geen overhead door boxing en casting Geen overhead door boxing en casting Code eenvoudiger te hergebruiken Code eenvoudiger te hergebruiken Erg handig voor ‘strongly typed’ collecties – Demo! Erg handig voor ‘strongly typed’ collecties – Demo! Voor een aantal structuren al voorhanden Voor een aantal structuren al voorhanden Dictionary, HashTable, List, Stack etc. Dictionary, HashTable, List, Stack etc.
Nieuwe statements in VB2005 IsNot – logische tegenhanger van Is statement IsNot – logische tegenhanger van Is statement Using – declareer, instantieer, gebruik en ruim op Using – declareer, instantieer, gebruik en ruim op Continue – stap naar volgende iteratie in loop Continue – stap naar volgende iteratie in loop TryCast – retourneert Nothing bij onmogelijk cast TryCast – retourneert Nothing bij onmogelijk cast Global – verwijs naar root namespace Global – verwijs naar root namespace
IsNot Duidelijker manier om te bepalen of een object een waarde heeft of niet overeenkomt met een ander object. 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. 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 Werkt met For… Next, Do en While lussen Lus is logischer en beter leesbaar 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. Geen Try.. Catch logica bij CType of DirectCast wanneer conversie mislukt. TryCast duidelijker leesbaar 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 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 Operator Overloading +, - etc. eigen klassen +, - etc. eigen klassen Conversie operatoren Conversie operatoren Eigen CType() Eigen CType() Unsigned Types Unsigned Types Property Accessor Property Accessor Partial Types Partial Types Events op applicatieniveau Events op applicatieniveau
Samenvatting De beste Visual Basic ooit! De beste Visual Basic ooit! Taal is compleet, volledige OO ondersteuning Taal is compleet, volledige OO ondersteuning Datatypen komen nu overeen met andere.NET talen Datatypen komen nu overeen met andere.NET talen IDE helpt mee met waarschuwingen van de compiler 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 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: ISBN: Pearson Education Benelux Pearson Education Benelux september 2006 in de winkel september 2006 in de winkel 272 pagina’s / € 19, pagina’s / € 19,95