Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy | ...

30
Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy www.vbcentral.nl | www.obelink.com | www.maryor.nl

Transcript of Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy | ...

Page 1: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Visual Basic 2008 – What’s new

André Obelink, MCSD – MVPMarYor | software & consultancy

www.vbcentral.nl | www.obelink.com | www.maryor.nl

Page 2: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Me.About.ToString()

• MarYor | software & consultancy• Auteur van artikelen en boeken..

– Geschreven voor Microsoft .NET Magazine, PC Active,MSDN Magazine Europe, SDN Magazine, VB Magazine

– Boek: Visual Basic 2005 – de Basis (9/2006)– Boek: Visual Basic Kookboek (3/2008)– Boek: Visual Basic 2008 – de Basis (verwacht 5/2008)

• De andere persoon achter VBcentral.nl• VP Speakers Bureau INETA Europe• Microsoft MVP voor Visual Basic sinds 2006

Page 3: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Wat niet aan de orde komt…

• Diverse uitbreidingen binnen VS2008 IDE– Quality tools– Uitbreidingen ten behoeve van WPF applicaties– Uitbreidingen ten behoeve van webapplicaties– Reporting: nieuwe Report Projects– MSBuild: multi-targetting, multiple processors– …….

• http://msdn2.microsoft.com/en-us/library/bb386063.aspx

Page 4: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Wat wel aan de orde komt…

• Performance VB2008 ten opzichte van VB2005• Intellisense Everywhere• Language Integrated Query (LINQ)– LINQ to Objects, LINQ to SQL en LINQ to XML– En de taaluitbreidingen die LINQ mogelijk maakt…

Type Infering, Object Initializers, Anonymous types, Extension methods, Lambda Expressions, …

• XML Data Type

Page 5: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Performance VB2008 ↔VB2005Scenario VB2005 (ms) VB2008 (ms) x Sneller

Builden grote projecten (background compilation) 222206.25 1352.88 164.25

Responsiviteit na toevoegen member aan class 327.00 36.50 8.96

Responsiviteit na openen van een project 255551.25 387969.38 6.59

Intellisense - eerste keer lijst types weergeven 1192.50 530.50 2.25

Edit-and-Continue in solution met XML comments 441.25 210.50 2.10

F5 indien solution al een keer is gebuild 385.20 278.70 1.38

Item toevoegen aan Error List bij maken fout 531.25 394.50 1.35

• Verdere performance verbeteringen- Debugger, projecten laden, …

Bron: Lisa Feigenbaum (VB team). Testmachine: Windows XP, Dual Core Pentium, 3.0 Ghz, 1 GB RAM

Page 6: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Intellisense

• Intellisense ‘everywhere’• Performance sterk verbeterd• Intellisence voor JavaScript, CSS en XML literals • Transparant met CTRL toets– onderliggende code zichtbaar

• VB: filtert het resultaat, waardoor lijst compacter

• VB: LINQ en Intellisense + tooltip hints

Page 7: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Visual Basic 9.0 – Design Goals

• Vereenvoudig het werken met data– Integratie van query- en transformatie opdrachten– Universele manier van ‘quering’ van objecten,

relationele data en XML data• Vereenvoudig het werken met XML– Breng structuur in documenten zonder schema– Maak creëren van XML documenten makkelijker– Vereenvoudig toegang tot XML elementen

Page 8: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Databronnen die LINQ ondersteunen

Language INtegrated Query (LINQ)

LINQTo

Objects

Objecten

LINQTo XML

<boek> <titel/> <auteur/></boek>

XML

LINQTo

Datasets

LINQTo SQL

LINQTo

Entities

Relationele data

LINQ binnen ADO.NET

Overige…VB C#

.NET Language-Integrated Query

Page 9: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

DemoLanguage Integrated Query

Page 10: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

De ‘magie’ achter LINQDim query = From proc In Process.GetProcesses _ Where proc.Threads.Count > 10 _ Select proc.ProcessName, proc.Threads.Count

Dim query = Process.GetProcesses(). _ Where(Function(proc As Process) proc.Threads.Count > 10). _ Select(Function(proc As Process) _ New With{.ProcessName = proc.ProcessName, _ .Count = proc.Threads.Count})

Function _Filter1(proc As Process) As Boolean Return proc.Threads.Count > 10Exit Function

Function _Projection1(proc As Process) As <AnonymousType> Dim projection As New <AnonymousType> projection.ProcessName = proc.ProcessName projection.Count = proc.Threads.Count Return projectionEnd Function

Page 11: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Query ExpressionsQuery pattern – Beschikbare Query Operators

Project Select <expr>

Filter Where <expr>, Distinct

Test Any(<expr>), All(<expr>)

Join <expr> Join <expr> On <expr> Equals <expr>

GroupGroup By <expr>, <expr> Into <expr>, <expr> Group Join <decl> On <expr> Equals <expr>Into <expr>

Aggregate Count([<expr>]), Sum(<expr>), Min(<expr>), Max(<expr>), Avg(<expr>)

Partition Skip [While] <expr>, Take [While] <expr>

Set Union, Intersect, Except (afwezig, echter makkelijk zelf te realiseren)

Order Order By <expr>, <expr> [Ascending|Descending]

Page 12: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Relationele data vandaag de dagDim connection As New SqlConnection(…)

connection.Open()

Dim cmd As New SqlCommand(“SELECT c.Name, c.Phone “ & _

“FROM Customers As c” & _

“WHERE c.City = @p0”)

cmd.Parameters(“@p0”) = “London”

Dim dr As DataReader = connection.Execute(cmd)While dr.Read() Dim name as String = dr.GetString(0) Dim telefoon as String = dr.GetString(1) Dim gebdatum As Date = dr.GetDateTime(2)End While

connection.Close()

Queries tussen aanhalingstekens

‘loosely bound’ argumenten

‘loosely typed’ resultaten

Geen controle tijdens compileren

Page 13: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Relationele Data met LINQPublic Class Customer …End Class

Public Class Northwind Inherits DataContext

Public Property Customers As Table(Of Customer) …End Class

Dim db As New Northwind(…)Dim contact = From cust in db.Customers _ Where cust.City = “London” Select cust.Name, cust.Phone

For Each custInfo in Contacts DoeIets(custInfo.Name, custInfo.Phone)Next

Klassen beschrijven data

Een Table is een soort collection

‘strongly typed’ connection

Geïntegreerde query syntax

‘strongly typed’ resultaten

Page 14: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

DemoLinq voor relationele data – Linq to SQL

Page 15: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

• From komt voor Select

Even wennen aan de ‘SQL’ syntax

Dim klanten = From klant in db.Customers _ Select klant.CustomerID,

klant.CompanyName

Nodig voor IntelliSense

Dim klanten2 = From klant in klanten _ Where klant.Name.StartsWith(“O”) _ Select klant.Name, klant.City

Dim klanten = From klant in db.Customers _ Select klant.Name, klant.City, klant.ZIP _ Order By ZIP, _

Select Name, City

• Veel vrijheid bij bouwen query Bouw opdrachten ‘regel voor regel’ …

… en over meerdere statements

Eventueel Select achterwege laten

Page 16: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

• Expliciete aggregatie

• Bevat ook operators voor hiërarchische data

Even wennen aan de ‘SQL’ syntax

Dim klanten = From sod in db.SalesOrderDetails _ Group By sod.SalesOrderHeader.CustomerID _ Into OrderTotaal = Sum(sod.OrderQty *

sod.UnitPrice) _ Select CustomerID, OrderTotaal

Zogenaamde ‘Grouping Key’

Expliciete aggregatie

Imports System.Diagnostics

Dim procs = From proc In Process.GetProcesses() _ Aggregate thread In proc.Threads _ Into ThreadPriorityGemiddelde = Average(thread.CurrentPriority)

_ Select LijstProcessen = proc.ProcessName,

ThreadPriorityGemiddelde

Groep bestaat al

Page 17: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

DemoLinq to XML – Maak XML

Page 18: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Maak XML - vandaag de dagDim doc As New XmlDocumentDim wns As XmlElement = doc.CreateElement("Werknemers")

For Each werknemer As Werknemer In werknemers If werknemer.Achternaam = "Jansen" Then Dim wn As XmlElement = doc.CreateElement("Werknemer") Dim BSN As XmlAttribute = doc.CreateAttribute("BSN") BSN.Value = werknemer.BSN : wn.Attributes.Append(BSN) Dim an As XmlElement = doc.CreateElement("Achternaam") an.InnerText = werknemer.Achternaam : wn.AppendChild(an) Dim voornaam As XmlElement = doc.CreateElement("Voornaam") voornaam.InnerText = werknemer.Voornaam : wn.AppendChild(voornaam)

wns.AppendChild(wn) End IfNext

doc.AppendChild(wns)

<Werknemers> <Werknemer BSN=“12345”>

<Achternaam>Jansen</Achternaam> <Voornaam>Piet</Piet> </Werknemer> …</Werknemers>

Imperatief model

‘Document centric’

Geen geïntegreerde queries

Geheugen intensief

Page 19: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

LINQ to XML – Maak XML

Dim xml As New XElement("Werknemers", _ From w In werknemers _ Where w.Achternaam = "Jansen" _ Select New XElement("Werknemer", _ New XAttribute("BSN", w.BSN), _ New XElement("Achternaam", w.Achternaam), _ New XElement("Voornaam", w.Voornaam)))

Declaratief model

Geïntegreerde queries

‘Element centric’

Kleiner en sneller

Page 20: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

DemoLinq to XML – Geïntegreerde XML binnen VB

Page 21: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Geïntegreerde XML binnen VB

Dim werknemersxml = _ <Werknemers> <%= From w in werknemers _ Where w.Voornaam = “Jan” _ Select <Werknemer> <Achternaam><%= w.Achternaam

%></Achternaam> <Voornaam><%= w.Voornaam

%></Voornaam> </Werknemer> %> </Werknemers>

Infers Xml.Linq XElement

Geen conceptuele barrière

‘Expression holes’ voor dynamische data / variabelen.

Page 22: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

• Query expressions• XML literals• XML element access• Nullable types• Object initializers• Local type inference• Lambda expressions

Visual Basic 2008 - Features

• Extension methods• Expression trees• Anonymous types• Ternary operator• Coalesce operator• Relaxed delegates• Partial methods

Page 23: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Tot de tijd op is…Taaluitbreidingen die LINQ mogelijk maken, maar ook erg handig zijn voor eigen gebruik!

Page 24: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

• Uitbreiden van bestaande datatypen– Plaats methode in module en in zelfde namespace– Markeer methode met <Extension()>

Extension methods

<Extension()> _Public Function Omdraaien(ByVal tekst As String) As String

Dim karakterArray() As Char = tekst.ToCharArray() Array.Reverse(karakterArray) Return New String(karakterArray)

End Function

Dim strNaam As String = “André”

Debug.Print strNaam.Omdraaien()

--------------ResultaatérdnA

Page 25: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

• Specificieer eigenschappen bij instantiëren– Is anders dan een overloaded Sub New()– Gebruik With {.eigenschapnaam = ….}

Object Initializers

Public Class Werknemer

Public Property BSN() As String …. End Property ….

End Class

Dim werknemer As New Werknemer() With {.BSN = “123”}

of …

Dim bestand As New FileInfo(“c:\test.txt”) _ With {.IsReadOnly = True, _ .CreationTime = Now}

Page 26: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

• Definieer + instantieer objecten ‘on the fly’– … dit is waar LINQ op gebaseerd is...

Anonymous Types

Dim boek = New With {.Titel = "Visual Basic Kookboek", _ .Auteur = "André Obelink", _ .ISBN = 9789043014878}

boek.Titel &= " - Luxe Editie"

Page 27: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

• Functiedefinitie binnen een andere functie– lambda expressies zijn ook als argument te gebruiken– soort instantie van een delegate

Lambda Expressions

Dim woordenLijst As New List(Of String)woordenLijst.Add("een") : woordenLijst.Add("twee")woordenLijst.Add("vier") : woordenLijst.Add("zes")

Dim DrieLetterWoorden = Function(s As String) s.Length = 3

Dim lijst = woordenLijst.FindAll(DrieLetterWoorden)For Each getal In lijst MessageBox.Show(getal)Next

Dim Verdubbel = Function(Getal As Integer) Getal * 2

MessageBox.Show(Verdubbel(5).ToString)MessageBox.Show(Verdubbel(13).ToString)

Page 28: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

• Refactor!– Gratis Visual Studio Add-In van DevExpress– Geschikt voor Visual Basic 2003 – 2008– Veel nieuwe features (>15), enkele alleen VB

• Visual Basic Power Packs 3.0 VB6 upgrade– PrintForm, Printer Compatibility Library– Line en Shape Controls– Interop Forms Toolkit 2.0 MDI + User controls– DataRepeater Control

Visual Basic 2008 – Extra’s

Page 29: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

Vragen?e-mail: [email protected]: www.obelink.com | www.maryor.nl

Page 30: Visual Basic 2008 – What’s new André Obelink, MCSD – MVP MarYor | software & consultancy  |  | .

HEROEShappen {here}

LaunchKit