300 likes | 380 Views
Visual Basic 2008 – What’s new. André Obelink, MCSD – MVP MarYor | software & consultancy www.vbcentral.nl | www.obelink.com | www.maryor.nl. Me.About.ToString (). MarYor | software & consultancy Auteur van artikelen en boeken..
E N D
Visual Basic 2008 – What’snew André Obelink, MCSD – MVP MarYor | software & consultancywww.vbcentral.nl | www.obelink.com | www.maryor.nl
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
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
Wat wel aan de orde komt… • Performance VB2008 ten opzichte van VB2005 • IntellisenseEverywhere • LanguageIntegrated 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, Extensionmethods, LambdaExpressions, … • XML Data Type
Performance VB2008 ↔VB2005 Bron: Lisa Feigenbaum (VB team). Testmachine: Windows XP, Dual Core Pentium, 3.0 Ghz, 1 GB RAM • Verdereperformance verbeteringen • - Debugger, projecten laden, …
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
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
LanguageINtegrated Query (LINQ) Overige… C# VB .NET Language-Integrated Query Databronnen die LINQ ondersteunen LINQ binnen ADO.NET LINQ To XML LINQ To Objects LINQ To Datasets LINQ To Entities LINQ To SQL <boek> <titel/> <auteur/> </boek> Objecten Relationele data XML
Demo LanguageIntegrated Query
De ‘magie’ achter LINQ Dim query = Fromproc In Process.GetProcesses _ Whereproc.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 > 10 Exit Function • Function _Projection1(proc As Process) As <AnonymousType> • Dim projection As New <AnonymousType> • projection.ProcessName = proc.ProcessName • projection.Count = proc.Threads.Count • Return projection • End Function
Relationele data vandaag de dag Dim connectionAs 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) Whiledr.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 ‘looselybound’ argumenten ‘looselytyped’ resultaten Geen controle tijdens compileren
Relationele Data met LINQ Public ClassCustomer … End Class Public ClassNorthwind InheritsDataContext Public PropertyCustomers As Table(Of Customer) … End Class Klassen beschrijven data Een Table is een soort collection ‘stronglytyped’ connection Dim db As New Northwind(…) Dim contact = Fromcust in db.Customers _ Wherecust.City = “London” Select cust.Name, cust.Phone For EachcustInfo in Contacts DoeIets(custInfo.Name, custInfo.Phone) Next Geïntegreerde query syntax ‘stronglytyped’ resultaten
Demo Linq voor relationele data – Linq to SQL
Even wennen aan de ‘SQL’ syntax Nodig voor IntelliSense • From komt voor Select Dim klanten = From klant in db.Customers _ Select klant.CustomerID, klant.CompanyName • Veel vrijheid bij bouwen query Bouw opdrachten ‘regel voor regel’ … Dim klanten = From klant in db.Customers _ Select klant.Name, klant.City, klant.ZIP _ Order By ZIP, _ Select Name, City … en over meerdere statements Dim klanten2 = From klant in klanten _ Whereklant.Name.StartsWith(“O”) _ Select klant.Name, klant.City Eventueel Select achterwege laten
Even wennen aan de ‘SQL’ syntax Zogenaamde ‘GroupingKey’ • Expliciete aggregatie • Bevat ook operators voor hiërarchische data Dim klanten = Fromsodin db.SalesOrderDetails _ Group Bysod.SalesOrderHeader.CustomerID _ IntoOrderTotaal = Sum(sod.OrderQty * sod.UnitPrice) _ Select CustomerID, OrderTotaal Expliciete aggregatie ImportsSystem.Diagnostics Dim procs = Fromproc In Process.GetProcesses() _ Aggregate thread In proc.Threads _ IntoThreadPriorityGemiddelde = Average(thread.CurrentPriority) _ • Select LijstProcessen = proc.ProcessName, ThreadPriorityGemiddelde Groep bestaat al
Demo Linq to XML – Maak XML
Maak XML - vandaag de dag Dim doc As New XmlDocument Dim wns As XmlElement = doc.CreateElement("Werknemers") For Each werknemer As Werknemer In werknemers Ifwerknemer.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 If Next doc.AppendChild(wns) Imperatief model Geen geïntegreerde queries ‘Document centric’ Geheugen intensief <Werknemers> <Werknemer BSN=“12345”> <Achternaam>Jansen</Achternaam> <Voornaam>Piet</Piet> </Werknemer> … </Werknemers>
LINQ to XML – Maak XML Declaratief model Dim xml As New XElement("Werknemers", _ From w In werknemers _ Wherew.Achternaam = "Jansen" _ Select New XElement("Werknemer", _ New XAttribute("BSN", w.BSN), _ New XElement("Achternaam", w.Achternaam), _ New XElement("Voornaam", w.Voornaam))) Geïntegreerde queries ‘Element centric’ Kleiner en sneller
Demo Linq to XML – Geïntegreerde XML binnen VB
Geïntegreerde XML binnen VB InfersXml.LinqXElement Dim werknemersxml = _ <Werknemers> <%= From w in werknemers _ Wherew.Voornaam = “Jan” _ Select <Werknemer> <Achternaam><%= w.Achternaam %></Achternaam> • <Voornaam><%= w.Voornaam %></Voornaam> </Werknemer> %> </Werknemers> Geen conceptuele barrière ‘Expression holes’ voor dynamische data / variabelen.
Visual Basic 2008 - Features • Query expressions • XML literals • XML element access • Nullable types • Object initializers • Local type inference • Lambdaexpressions • Extensionmethods • Expression trees • Anonymous types • Ternary operator • Coalesce operator • Relaxed delegates • Partialmethods
Tot de tijd op is… Taaluitbreidingen die LINQ mogelijk maken, maar ook erg handig zijn voor eigen gebruik!
Extensionmethods • Uitbreiden van bestaande datatypen • Plaats methode in module en in zelfde namespace • Markeer methode met <Extension()> <Extension()> _ Public Function Omdraaien(ByValtekst 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.PrintstrNaam.Omdraaien() -------------- Resultaat érdnA
Object Initializers • Specificieer eigenschappen bij instantiëren • Is anders dan een overloaded Sub New() • Gebruik With {.eigenschapnaam = ….} 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}
Anonymous Types • Definieer + instantieer objecten ‘on the fly’ • … dit is waar LINQ op gebaseerd is... Dim boek = New With {.Titel = "Visual Basic Kookboek", _ .Auteur = "André Obelink", _ .ISBN = 9789043014878} boek.Titel &= " - Luxe Editie"
LambdaExpressions • Functiedefinitie binnen een andere functie • lambda expressies zijn ook als argument te gebruiken • soort instantie van een delegate 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)
Visual Basic 2008 – Extra’s • 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 CompatibilityLibrary • Line en Shape Controls • InteropForms Toolkit 2.0 MDI + User controls • DataRepeaterControl
Vragen? e-mail: andre@obelink.com web: www.obelink.com | www.maryor.nl
HEROEShappen {here} LaunchKit