Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Oktober 2007Overblik over udviklingen af.NET frameworket1 Overblik over udviklingen af.NET frameworket - et kig på de vigtigste nyheder i de seneste versioner.

Lignende præsentationer


Præsentationer af emnet: "Oktober 2007Overblik over udviklingen af.NET frameworket1 Overblik over udviklingen af.NET frameworket - et kig på de vigtigste nyheder i de seneste versioner."— Præsentationens transcript:

1 oktober 2007Overblik over udviklingen af.NET frameworket1 Overblik over udviklingen af.NET frameworket - et kig på de vigtigste nyheder i de seneste versioner Captator Tlf: 8620 4242 www.captator.dk Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark lykke@captator.dk Mobil: 2237 3311

2 Indhold Synopsis: Formålet med denne TechTalk er at give dig et overblik over hvad de nyere versioner af.NET frameworket tilbyder af muligheder. Fokus på de vigtigste framework features: Generics, nullable typer, partielle typer WPF, WCF, WF Anonyme metoder, lambda funktioner, extension metoder, anonyme typer, type inferens, LINQ CLR Add-Ins Andre væsentlige features: VS 2008 sprog features, ClickOnce, ADO.NET 2.0, ASP.NET 2.0, ASP.NET AJAX, SilverLight, CLR add-ins oktober 2007Overblik over udviklingen af.NET frameworket2

3 Visual Studio og.NET frameworket oktober 2007Overblik over udviklingen af.NET frameworket3 En platform i udvikling Visual Studio og.NET framework preview Juni 2000 Visual Studio.NET og.NET framework 1.0 Februar 2002 Visual Studio 2003 og.NET framework 1.1 April 2003 Visual Studio 2005 og.NET framework 2.0 November 2005.NET framework 3.0 November 2006 Visual Studio 2008 og.NET framework 3.5 Ultimo 2007

4 oktober 2007Overblik over udviklingen af.NET frameworket4 Ikke-generiske metoder Ønske: At kunne tage maksimum af to værdier Mulig løsning: Kan sammenligne vha. IComparable Public Function MaxValue (ByVal a As System.IComparable, _ ByVal b As System.IComparable) As Object If a.CompareTo(b) > 0 Then 'Kan give en run-time fejl Return a Else Return b End If End Function Dim max As Integer = CType(Max(17, 42), Integer) Public Function MaxValue (ByVal a As System.IComparable, _ ByVal b As System.IComparable) As Object If a.CompareTo(b) > 0 Then 'Kan give en run-time fejl Return a Else Return b End If End Function Dim max As Integer = CType(Max(17, 42), Integer) Vil give en run-time fejl, ved kald med to forskellige typer – for eksempel et tal og en streng Public Function MaxValue(ByVal a As Integer, ByVal b As Integer) As Integer '... End Sub Public Function MaxValue (ByVal a As String, ByVal b As String) As String '... End Sub ' etc... Public Function MaxValue(ByVal a As Integer, ByVal b As Integer) As Integer '... End Sub Public Function MaxValue (ByVal a As String, ByVal b As String) As String '... End Sub ' etc... VB

5 oktober 2007Overblik over udviklingen af.NET frameworket5 Generiske metoder Definition af generisk metode Brug af generisk metode Public Function MaxValue(Of T As System.IComparable(Of T)) _ (ByVal a As T, ByVal b As T) As T If a.CompareTo(b) > 0 Then Return a Else Return b End If End Sub Public Function MaxValue(Of T As System.IComparable(Of T)) _ (ByVal a As T, ByVal b As T) As T If a.CompareTo(b) > 0 Then Return a Else Return b End If End Sub Dim i As Integer = 17 Dim j As Integer = 42 Dim k As Integer = MaxValue(Of Integer)(i, j) Dim s As String = "Alfa" Dim t As String = "Omega" Dim r As String = MaxValue(Of String)(s, t) Dim i As Integer = 17 Dim j As Integer = 42 Dim k As Integer = MaxValue(Of Integer)(i, j) Dim s As String = "Alfa" Dim t As String = "Omega" Dim r As String = MaxValue(Of String)(s, t) VB

6 oktober 2007Overblik over udviklingen af.NET frameworket6 Generiske metoder Definition af generisk metode Brug af generisk metode public T MaxValue (T a, T b) where T : System.IComparable { if (a.CompareTo(b) > 0) return a; else return b; } public T MaxValue (T a, T b) where T : System.IComparable { if (a.CompareTo(b) > 0) return a; else return b; } int i = 17; int j = 42; int k = MaxValue (i, j); string s = "Alfa"; string t = "Omega"; string r = MaxValue (s, t); int i = 17; int j = 42; int k = MaxValue (i, j); string s = "Alfa"; string t = "Omega"; string r = MaxValue (s, t); C#

7 oktober 2007Overblik over udviklingen af.NET frameworket7 Generics Motivation for generics at kunne lave generel og typestærk funktionalitet at undgå overhead på grund af boxing Forskellige slags generics Metoder, klasser, structs, interfaces og delegates Hvordan er generics implementeret i.NET? Instantieres på run-time, ikke compile-time Checkes på design-/compile-time Virker for både reference og value typer Komplet run-time type information

8 oktober 2007Overblik over udviklingen af.NET frameworket8 Collections - generiske System.Collections.Generic Dictionary, LinkedList, List, Queue, SortedList, Stack, HashSet (.NET 3.5) Typestærke og generelle, ikke eksplicitte typecasts => Type-sikker kode og stor mulighed for genbrug Dim col As New System.Collections.Generic.List(Of Integer) col.Add(17) 'Der sker ingen boxing her col.Add("Hello") Dim i As Integer = col(0) 'Der sker ingen typecast her Dim col As New System.Collections.Generic.List(Of Integer) col.Add(17) 'Der sker ingen boxing her col.Add("Hello") Dim i As Integer = col(0) 'Der sker ingen typecast her Kompileringsfejl  System.Collections.Generic.List col = new System.Collections.Generic.List (); col.Add(17); // Der sker ingen boxing her col.Add("Hello"); int i = col[0]; // Der sker ingen typecast her System.Collections.Generic.List col = new System.Collections.Generic.List (); col.Add(17); // Der sker ingen boxing her col.Add("Hello"); int i = col[0]; // Der sker ingen typecast her VB C# Kompileringsfejl 

9 oktober 2007Overblik over udviklingen af.NET frameworket9 Nullable typer Alle value typer kan gøres nullable ved anvendelse af System.Nullable(Of T) / System.Nullable Struktur der kombinerer T og en boolean Value – readonly property (value-type) HasValue - readonly property (boolean) 123 Int32 123 Nullable(Of Int32) / Nullable True ??? False Ikke Nothing Nothing Value HasValue Udefineret værdi

10 oktober 2007Overblik over udviklingen af.NET frameworket10 Nullable typer Eksempler på brug af System.Nullable Dim x As New System.Nullable(Of Integer)(17) Dim y As System.Nullable(Of Integer) = 17 Dim z As System.Nullable(Of Integer) ' Nothing er default x = 42 x = Nothing Dim isTrue As Boolean = (x = Nothing) y = x.GetValueOrDefault(13) ' da x=Nothing returneres 13 y = y.GetValueOrDefault(17) ' da y<>Nothing returneres y.Value Dim isAlsoTrue As Boolean = y.HasValue Dim is13 As Integer = y.Value Dim x As New System.Nullable(Of Integer)(17) Dim y As System.Nullable(Of Integer) = 17 Dim z As System.Nullable(Of Integer) ' Nothing er default x = 42 x = Nothing Dim isTrue As Boolean = (x = Nothing) y = x.GetValueOrDefault(13) ' da x=Nothing returneres 13 y = y.GetValueOrDefault(17) ' da y<>Nothing returneres y.Value Dim isAlsoTrue As Boolean = y.HasValue Dim is13 As Integer = y.Value System.Nullable x = new System.Nullable (17); System.Nullable y = 17; System.Nullable z; // null er default x = 42; x = null; bool isTrue = (x == null); y = x.GetValueOrDefault(13); // da x == null returneres 13 y = y.GetValueOrDefault(17); // da y != null returneres y.Value bool isAlsoTrue = y.HasValue; int is13 = y.Value; System.Nullable x = new System.Nullable (17); System.Nullable y = 17; System.Nullable z; // null er default x = 42; x = null; bool isTrue = (x == null); y = x.GetValueOrDefault(13); // da x == null returneres 13 y = y.GetValueOrDefault(17); // da y != null returneres y.Value bool isAlsoTrue = y.HasValue; int is13 = y.Value; VB C#

11 oktober 2007Overblik over udviklingen af.NET frameworket11 Nullable typer Syntaktisk sukker i C# og i VB (i VS2008) Syntaktisk sukkerSvarende til C# int? z1;System.Nullable z; C# int? y1 = 17;System.Nullable y = 17; C# int? x1 = new int?(17);System.Nullable x = new System.Nullable (17); C# int y = z1 ?? 13;y = x.GetValueOrDefault(13); C# int? z = (int?) new double?(17.42); System.Nullable z = (System.Nullable ) new System.Nullable (17.42); VB Dim z1 As Integer?Dim z As System.Nullable(Of Integer) VB Dim y1 As Integer? = 17Dim z As System.Nullable(Of Integer) = 17 VB Dim x1 As Integer? = New Integer?(17) Dim z As System.Nullable(Of Integer) = New System.Nullable(Of Integer)(17) VB Dim z As Integer? = Ctype(New Double?(17.42), Integer?) Dim z As System.Nullable(Of Integer) = CType(New System.Nullable(Of Double) (17.42), Integer)

12 oktober 2007Overblik over udviklingen af.NET frameworket12 Partielle typer Partial Public Class Klasse Public ReadOnly Property Egenskab() As String Get Return _state End Get End Property Public Sub Metode1() _state = "Skuddermudder" End Sub End Class Partial Public Class Klasse Public ReadOnly Property Egenskab() As String Get Return _state End Get End Property Public Sub Metode1() _state = "Skuddermudder" End Sub End Class Partial Public Class Klasse Private _state As String Public Sub Metode2() _state = "Skummelskud" End Sub End Class Partial Public Class Klasse Private _state As String Public Sub Metode2() _state = "Skummelskud" End Sub End Class Public Class Klasse Public ReadOnly Property Egenskab() As String Get Return _state End Get End Property Public Sub Metode1() _state = "Skuddermudder" End Sub Private _state As String Public Sub Metode2() _state = "Skummelskud" End Sub End Class Public Class Klasse Public ReadOnly Property Egenskab() As String Get Return _state End Get End Property Public Sub Metode1() _state = "Skuddermudder" End Sub Private _state As String Public Sub Metode2() _state = "Skummelskud" End Sub End Class Dim obj As New Klasse obj.Metode1() obj.Metode2() MessageBox.Show(obj.Egenskab) Dim obj As New Klasse obj.Metode1() obj.Metode2() MessageBox.Show(obj.Egenskab) VB

13 oktober 2007Overblik over udviklingen af.NET frameworket13 Partielle typer public partial class Klasse { public void Metode1() { _state = "Skuddermudder"; } public string Egenskab { get { return _state; } } public partial class Klasse { public void Metode1() { _state = "Skuddermudder"; } public string Egenskab { get { return _state; } } public partial class Klasse { private string _state; public void Metode2() { _state = "Skummelskud"; } public partial class Klasse { private string _state; public void Metode2() { _state = "Skummelskud"; } public class Klasse { public void Metode1() { _state = "Skuddermudder"; } public string Egenskab { get { return _state; } } private string _state; public void Metode2() { _state = "Skummelskud"; } public class Klasse { public void Metode1() { _state = "Skuddermudder"; } public string Egenskab { get { return _state; } } private string _state; public void Metode2() { _state = "Skummelskud"; } Klasse obj = new Klasse(); obj.Metode1(); obj.Metode2(); MessageBox.Show(obj.Egenskab); Klasse obj = new Klasse(); obj.Metode1(); obj.Metode2(); MessageBox.Show(obj.Egenskab); C#

14 Unified programmeringsmodel oktober 2007Overblik over udviklingen af.NET frameworket14 Interoperabilitet med andre platforme ASMX Attribut-baseretprogrammering Enterprise Services WS-*protocolsupport WSE Message-orienteretprogrammering System.Messaging Udvidbarhed Lokations transparens.NET Remoting

15 WCF bestanddele WCF definerer en række standard bindings BasicHttp, WsHttp, WsDualHttp, NetTcp, NetPeerTcp, NetNamedPipes, NetMsmq, MsmqIntegration oktober 2007Overblik over udviklingen af.NET frameworket15 Hvad skal der sendes? Hvor skal det sendes hen? Hvordan skal det sendes? Kontrakt Adresse Binding Service Klient Transport? Encoding? Sikkerhed?

16 WCF implementation Service Definer kontrakt Implementer kontrakt Stil host til rådighed Konfigurer binding Konfigurer adresse oktober 2007Overblik over udviklingen af.NET frameworket16 Klient Download metadata (sæt reference) Generer proxy eller brug channelfactory Kald metoder Channel Service instans Channel Proxy SessionSession

17 Visuelt overbevisende brugergrænseflader Næste generation af Windows’ præsentationsmodel Unified programmeringsmodel Vektor-baseret grafik Udnytter PCens grafik-hardware CPUen fritages for arbejde med grafik Brugergrænsefladen specificeres som en objektgraf Genereres ud fra et XML dokument eller af et program Eventkode og brugergrænsefladen kan defineres separat XML dokumenter kan let genereres og parses af værktøjer og komponente Værktøjsunderstøttelse oktober 200717Overblik over udviklingen af.NET frameworket WPF arkitekturen

18 Funktionalitet Drawing Painting Kontroller Layout Styling Templates Animation Data binding 3D Document interface Tekst oktober 200718Overblik over udviklingen af.NET frameworket

19 Styling Gammeldaws tilpasning af kontrol WPF tilpasning af kontrol WPFs styling- og animations- modeller er baseret på direkte manipulation af properties Custom kontroller bør kun være nødvendige, hvis man ønsker en anden opførsel – ikke pga udseendet oktober 200719Overblik over udviklingen af.NET frameworket Properties Custom draw, owner draw eller custom kontrol Properties Custom kontrol Styling

20 Windows Workflow Foundation (WF) oktober 200720Overblik over udviklingen af.NET frameworket.NET assembly definerer workflow Kun markup (deklarativ) XAML Markup og kode C#/VB Kun kode Genereret af applikation XAML C#/VB • XML definerer workflow • XML definerer workflow • Code-beside definerer yderligere logik • Kode definerer workflow XAML C#/VB Applikation skaber aktivitetstræer og serialiserer Workflow kompiler wfc.exe C#/VB kompiler

21 Workflows er mængder af aktiviteter Workflows eksekveres i en host proces enhver applikation eller server Udviklere kan implementere deres egne custom aktiviteter Base Activity Library: Out-of-box aktiviteter og basis for custom aktiviteter Runtime Engine: Workflow eksekvering og state håndtering Runtime Services: Hosting og kommunikation Visual Designer: Grafisk og kode-baseret opbygning af workflows Windows Workflow Foundation oktober 200721Overblik over udviklingen af.NET frameworket Host proces Windows Workflow Foundation Runtime Engine Et workflow E n aktivitet Runtime Services Base Activity Library Custom Activity Library Visuel d esigner

22 oktober 2007Overblik over udviklingen af.NET frameworket22 Typen kan udledes af kompileren Statisk typet! Fuld intellisense Kompilercheck Varianter er tilbage igen! Implicitly typed local variables var pi = 3.14; var navn = "Anders And"; var idag = System.DateTime.Today; var tal = new int[] {10, 4, 17, 42}; var duck = new Person {Navn="Anders", Adresse="Andeby", Alder=71 }; var pi = 3.14; var navn = "Anders And"; var idag = System.DateTime.Today; var tal = new int[] {10, 4, 17, 42}; var duck = new Person {Navn="Anders", Adresse="Andeby", Alder=71 }; Double String DateTime System.Collections.Generic.List personer = new System.Collections.Generic.List (); var personer = new System.Collections.Generic.List (); System.Collections.Generic.List personer = new System.Collections.Generic.List (); var personer = new System.Collections.Generic.List (); ikke C#

23 oktober 2007Overblik over udviklingen af.NET frameworket23 Implicitly typed local variables Typen kan udledes af kompileren Statisk typet! Fuld intellisense Kompilercheck Dim pi = 3.14 Dim navn = "Anders And" Dim idag = System.DateTime.Today Dim tal = New Integer() {10, 4, 17, 42} Dim duck As New Person With {.Navn="Anders",.Adresse="Andeby",.Alder=71} Dim pi = 3.14 Dim navn = "Anders And" Dim idag = System.DateTime.Today Dim tal = New Integer() {10, 4, 17, 42} Dim duck As New Person With {.Navn="Anders",.Adresse="Andeby",.Alder=71} double string DateTime Dim personer As System.Collections.Generic.List(Of Person) = _ New System.Collections.Generic.List(Of Person)() Dim personer As New System.Collections.Generic.List(Of Person)() Dim personer As System.Collections.Generic.List(Of Person) = _ New System.Collections.Generic.List(Of Person)() Dim personer As New System.Collections.Generic.List(Of Person)() Har man hele tiden kunnet i VB VB

24 oktober 2007Overblik over udviklingen af.NET frameworket24 Anonyme typer En type behøver ikke at have noget (kendt) navn Dim b1 = New With {.Titel=".NET for hackere",.Pris = 17.42} Dim b2 = New With {.Titel=".NET for plattenslagere",.Pris = 42.17} Dim b3 = b2 b2 = b1 Dim bogensTitel As String = b1.Titel MessageBox.Show("Første bogs titel = " + b1.Titel) MessageBox.Show("Tredje bogs titel = " + b3.Titel) Dim b1 = New With {.Titel=".NET for hackere",.Pris = 17.42} Dim b2 = New With {.Titel=".NET for plattenslagere",.Pris = 42.17} Dim b3 = b2 b2 = b1 Dim bogensTitel As String = b1.Titel MessageBox.Show("Første bogs titel = " + b1.Titel) MessageBox.Show("Tredje bogs titel = " + b3.Titel) Dim p As New Person With {.Navn="Anders",.Adresse="Andeby",.Alder=71,.CprNr="123456-7890" } Dim addressInfo1 = New With { p.Navn, p.Adresse } Dim addressInfo2 = New With {.Navn = p.Navn,.Adresse = p.Adresse } Dim addressInfo3 = New With {.Name = p.Navn,.Address = p.Adresse } addressInfo2 = addressInfo1 addressInfo3 = addressInfo2 Dim p As New Person With {.Navn="Anders",.Adresse="Andeby",.Alder=71,.CprNr="123456-7890" } Dim addressInfo1 = New With { p.Navn, p.Adresse } Dim addressInfo2 = New With {.Navn = p.Navn,.Adresse = p.Adresse } Dim addressInfo3 = New With {.Name = p.Navn,.Address = p.Adresse } addressInfo2 = addressInfo1 addressInfo3 = addressInfo2 Compiler fejl  VB

25 oktober 2007Overblik over udviklingen af.NET frameworket25 Anonyme typer En type behøver ikke at have noget (kendt) navn var b1 = new {Titel=".NET for hackere", Pris=17.42}; var b2 = new {Titel=".NET for plattenslagere", Pris=42.17}; var b3 = b2; b2 = b1; string bogensTitel = b1.Titel; MessageBox.Show("Første bogs titel = " + b1.Titel); MessageBox.Show("Tredje bogs titel = " + b3.Titel); var b1 = new {Titel=".NET for hackere", Pris=17.42}; var b2 = new {Titel=".NET for plattenslagere", Pris=42.17}; var b3 = b2; b2 = b1; string bogensTitel = b1.Titel; MessageBox.Show("Første bogs titel = " + b1.Titel); MessageBox.Show("Tredje bogs titel = " + b3.Titel); Person p = new Person { Navn="Anders", Adresse="Andeby", Alder=71, CprNr="123456-7890" }; var addressInfo1 = new { p.Navn, p.Adresse }; var addressInfo2 = new { Navn = p.Navn, Adresse = p.Adresse }; var addressInfo3 = new { Name = p.Navn, Address = p.Adresse }; addressInfo2 = addressInfo1; addressInfo3 = addressInfo2; Person p = new Person { Navn="Anders", Adresse="Andeby", Alder=71, CprNr="123456-7890" }; var addressInfo1 = new { p.Navn, p.Adresse }; var addressInfo2 = new { Navn = p.Navn, Adresse = p.Adresse }; var addressInfo3 = new { Name = p.Navn, Address = p.Adresse }; addressInfo2 = addressInfo1; addressInfo3 = addressInfo2; Compiler fejl  C#

26 oktober 2007Overblik over udviklingen af.NET frameworket26 Delegates kan erstattes med inline kodeblokke Benytter delegate inferens Kan bruges hvor og som delegates kan bruges EventHandlers, callback-delegates Eksplicit assignment, delegate-parameter i metodekald Kode blokken kan undlade eller medtage delegate- typens parameterliste efter behov Undladt parameterliste er forskellig fra den tomme ( ) Returtypen og en eventuel parameterliste skal være kompatibel med delegatetypen Kan ”capture” omkringliggende metodes variable Forlænget levetid af disse lokale variable Anonyme metoder (C# - 2.0) delegate [(parameter-list)] { anonymous-method-block } C#

27 oktober 2007Overblik over udviklingen af.NET frameworket27 Anonyme metoder (C# - 2.0) MinDelegateType delCalc; delCalc = delegate { return 17 + 42; }; MessageBox.Show("17 + 42 = " + delCalc(2, 2).ToString()); delCalc = delegate(int x, int y) { return x + y; }; MessageBox.Show("2 + 2 = " + delCalc(2, 2).ToString()); int j = 42; delCalc = delegate(int x, int y) { return x + j; }; MessageBox.Show("2 + 42 = " + delCalc(2, 2).ToString()); MinDelegateType delCalc; delCalc = delegate { return 17 + 42; }; MessageBox.Show("17 + 42 = " + delCalc(2, 2).ToString()); delCalc = delegate(int x, int y) { return x + y; }; MessageBox.Show("2 + 2 = " + delCalc(2, 2).ToString()); int j = 42; delCalc = delegate(int x, int y) { return x + j; }; MessageBox.Show("2 + 42 = " + delCalc(2, 2).ToString()); private delegate int MinDelegateType(int a, int b); private int i = 119; private void btnAnonymeMetoder_Click(object sender, EventArgs e) { MinDelegateType delCalc; int k = 7; delCalc = delegate(int x, int y) { return i / k + y; }; MessageBox.Show("119 / 7 + 2 = " + delCalc(2, 2).ToString()); } private int i = 119; private void btnAnonymeMetoder_Click(object sender, EventArgs e) { MinDelegateType delCalc; int k = 7; delCalc = delegate(int x, int y) { return i / k + y; }; MessageBox.Show("119 / 7 + 2 = " + delCalc(2, 2).ToString()); } C#

28 oktober 2007Overblik over udviklingen af.NET frameworket28 Lamba udtryk Komprimerede anonyme metoder private delegate int MinDelegateType(int a); private void ShowResult(MinDelegateType del, int i) { MessageBox.Show(del(i).ToString()); } private delegate int MinDelegateType(int a); private void ShowResult(MinDelegateType del, int i) { MessageBox.Show(del(i).ToString()); } MinDelegateType delCalc = delegate(int x) { return x + 42; }; ShowResult( delCalc, 17); ShowResult( delegate(int x) { return x + 42; }, 18); ShowResult( ((int x) => x + 42), 19); ShowResult( (x => x + 42), 20); MinDelegateType delCalc = delegate(int x) { return x + 42; }; ShowResult( delCalc, 17); ShowResult( delegate(int x) { return x + 42; }, 18); ShowResult( ((int x) => x + 42), 19); ShowResult( (x => x + 42), 20); x er eksplicit typet x er implicit typet C# Dim delCalc As MyDelegateType = Function(x As Integer) x + 42 ShowResult(delCalc, 17) ShowResult(Function(x As Integer) x + 42, 18) ShowResult(Function(x) x + 42, 20) Dim delCalc As MyDelegateType = Function(x As Integer) x + 42 ShowResult(delCalc, 17) ShowResult(Function(x As Integer) x + 42, 18) ShowResult(Function(x) x + 42, 20) x er eksplicit typet x er implicit typet C# VB

29 oktober 2007Overblik over udviklingen af.NET frameworket29 Extension metoder Kan udvide udvalgte typer med ekstra metoder Lav en extension metode (statisk (C#) / shared (VB)) Det første argument til metoden udpeger typen, som extension metode virker på Metoden kaldes som en instansmetode Kan (naturligvis) også kaldes som en statisk / shared metode Importer namespacet (using (C#) / Imports (VB)) Extension metoderne i det importerede namespace kan nu kaldes Kald metoden på et objekt af den udvalgte type Kan være almindelige såvel som generiske metoder Instansmetoder ”slår” extension metoder

30 oktober 2007Overblik over udviklingen af.NET frameworket30 Extension metoder - eksempel I VB angiver System.Runtime.CompilerServices.Extension- attributten, at dette er en extension metode Namespace SuperExtensions _ Module MyExtensions _ Public Sub Show(ByVal [Me] As String) System.Windows.Forms.MessageBox.Show([Me]) End Sub End Module End Namespace Namespace SuperExtensions _ Module MyExtensions _ Public Sub Show(ByVal [Me] As String) System.Windows.Forms.MessageBox.Show([Me]) End Sub End Module End Namespace [Me] angiver objektet metoden kaldes på Keywords der bruges som identifiers skal i [ ] [Me] angiver objektet metoden kaldes på Keywords der bruges som identifiers skal i [ ] Dim str As String = "Hej verden" str.Show() Orcas_Cs.SuperExtensions.UserInterface.Show("Hej statiske verden"); Dim str As String = "Hej verden" str.Show() Orcas_Cs.SuperExtensions.UserInterface.Show("Hej statiske verden"); Imports Orcas_Vb.SuperExtensions VB

31 oktober 2007Overblik over udviklingen af.NET frameworket31 Extension metoder - eksempel I C# angiver ”this” som parameter-modifier, at dette er en extension metode namespace Orcas_Cs.SuperExtensions { static class UserInterface { public static void Show(this string s) { System.Windows.Forms.MessageBox.Show(s); } namespace Orcas_Cs.SuperExtensions { static class UserInterface { public static void Show(this string s) { System.Windows.Forms.MessageBox.Show(s); } this angiver objektet metoden kaldes på using Orcas_Cs.SuperExtensions; string str = "Hej verden"; str.Show(); Orcas_Cs.SuperExtensions.UserInterface.Show("Hej statiske verden"); string str = "Hej verden"; str.Show(); Orcas_Cs.SuperExtensions.UserInterface.Show("Hej statiske verden"); C#

32 oktober 2007Overblik over udviklingen af.NET frameworket32 Et problem … der måske eksisterer Query, parametre og resultat er ikke stærkt typet Queryen er kun en streng Parametrene er svagt typede Resultatet (f.eks. DataTable) er en collection af svagt typede objekter Query sproget er typisk koblet til databaser Ikke-trivielt at lave querysprog Dim sql As String = "SELECT * FROM Authors" Dim cmd As New System.Data.SqlClient.SqlCommand(sql, conn) Dim adap As New System.Data.SqlClient.SqlDataAdapter(cmd) Dim tbl As New System.Data.DataTable adap.Fill(tbl) conn.Close() Dim sql As String = "SELECT * FROM Authors" Dim cmd As New System.Data.SqlClient.SqlCommand(sql, conn) Dim adap As New System.Data.SqlClient.SqlDataAdapter(cmd) Dim tbl As New System.Data.DataTable adap.Fill(tbl) conn.Close() VB

33 LINQ Architecture oktober 2007Overblik over udviklingen af.NET frameworket33 Objects XMLRelational LINQ enabled data sources LINQ to Objects LINQ to XML LINQ enabled ADO.NET VB Others… LINQ to Entities LINQ to SQL LINQ to Datasets.NET Language Integrated Query (LINQ) C#

34 oktober 2007Overblik over udviklingen af.NET frameworket34 The Missing LINQ LINQ danner bro mellem.NET sprog og ”LINQ to *” Generel query facilitet i.NET frameworket Definerer en række standard query operatorer Gennemløb, filtrering, projektion,... Et API til at query ethvert.NET array eller collection Opererer på og returnerer objekter af typen IEnumerable (C#) / IEnumerable (VB) Extension metoder defineret i System.Linq.Queryable klassen Metoderne eksekveres først ved gennemløb De fleste metoder kan ”pipes” Koden kan modulariseres The missing link

35 oktober 2007Overblik over udviklingen af.NET frameworket35 Language Integrated Query Sprogunderstøttelse for query udtryk Fleksible projektioner Dim ænder As New List(Of Person) ænder.Add(New Person With {.Name = "Fethry Duck",.Address =... }) ænder.Add(New Person With {.Name = "Donald Duck",.Address =... }) Dim ænder As New List(Of Person) ænder.Add(New Person With {.Name = "Fethry Duck",.Address =... }) ænder.Add(New Person With {.Name = "Donald Duck",.Address =... }) Dim andeborgere = ænder.Where(Function(duck) duck.Address = "Andeby") _.OrderBy(Function(duck) duck.Age) _.ThenBy(Function(duck) duck.Name) _.Select(Function(duck) New With {duck.Age, duck.Name}) Dim andeborgere = From duck In ænder _ Where duck.Address = "Duckburg" _ Order By duck.Age, duck.Name _ Select New With {duck.Age, duck.Name} Dim andeborgere = From duck In ænder _ Where duck.Address = "Duckburg" _ Order By duck.Age, duck.Name _ Select New With {duck.Age, duck.Name} Eksekveres som For Each duck In duckburgers MessageBox.Show(duck.Name + " " + duck.Age.ToString()) Next For Each duck In duckburgers MessageBox.Show(duck.Name + " " + duck.Age.ToString()) Next Select New With {duck.Name,.Born = System.DateTime.Now.Year - duck.Age} VB

36 oktober 2007Overblik over udviklingen af.NET frameworket36 Language Integrated Query Sprogunderstøttelse for query udtryk Fleksible projektioner List ænder = new List { new Person {Navn="Fætter Vims", Adresse="Andeby", Alder = 34}, new Person...} }; List ænder = new List { new Person {Navn="Fætter Vims", Adresse="Andeby", Alder = 34}, new Person...} }; var andeborgere = ænder.Where(duck => duck.Adresse == "Andeby").OrderBy(duck => duck.Alder).ThenBy(duck => duck.Navn).Select(duck => new {duck.Alder, duck.Navn}); var andeborgere = ænder.Where(duck => duck.Adresse == "Andeby").OrderBy(duck => duck.Alder).ThenBy(duck => duck.Navn).Select(duck => new {duck.Alder, duck.Navn}); var andeborgere = from duck in ænder where duck.Adresse == "Andeby" orderby duck.Alder, duck.Navn select new {duck.Alder, duck.Navn}; var andeborgere = from duck in ænder where duck.Adresse == "Andeby" orderby duck.Alder, duck.Navn select new {duck.Alder, duck.Navn}; Eksekveres som foreach (var duck in andeborgere) { MessageBox.Show(duck.Name + " " + duck.Age); } foreach (var duck in andeborgere) { MessageBox.Show(duck.Name + " " + duck.Age); } select new { duck.Name, Born = System.DateTime.Now.Year - duck.Age }; C#

37 Object Relational Designer Tilføj et ”LINQ to SQL File” project item til projektet Definer connectionen Drag and drop database objekterne fra server exploreren ind på O/R designerens overflade oktober 2007Overblik over udviklingen af.NET frameworket37

38 oktober 2007Overblik over udviklingen af.NET frameworket38 LINQ to SQL - selektion Eksempel på en select query var db = new PubsDataClassesContext(_connectionString); var titles = db.GetTable (); var titleQuery = from theBook in db.titles join rel in db.titleauthors on theBook.title_id equals rel.title_id join theAuthor in db.authors on rel.au_id equals theAuthor.au_id where theBook.price < 10 select new { theBook.title_id, theBook.title, theBook.price, theAuthor.au_lname, theAuthor.au_fname }; txtData.Text = ""; foreach (var res in titleQuery) { txtData.Text += res.title_id + "\t" + res.title + "\t" + res.price.ToString() + "\t" + res.au_fname + "\t" + res.au_lname + "\r\n\r\n"; } var db = new PubsDataClassesContext(_connectionString); var titles = db.GetTable (); var titleQuery = from theBook in db.titles join rel in db.titleauthors on theBook.title_id equals rel.title_id join theAuthor in db.authors on rel.au_id equals theAuthor.au_id where theBook.price < 10 select new { theBook.title_id, theBook.title, theBook.price, theAuthor.au_lname, theAuthor.au_fname }; txtData.Text = ""; foreach (var res in titleQuery) { txtData.Text += res.title_id + "\t" + res.title + "\t" + res.price.ToString() + "\t" + res.au_fname + "\t" + res.au_lname + "\r\n\r\n"; } IEnumerable C#

39 oktober 2007Overblik over udviklingen af.NET frameworket39 Spørgsmål www.captator.dk www.captator.dk nyheder, artikler, information,...


Download ppt "Oktober 2007Overblik over udviklingen af.NET frameworket1 Overblik over udviklingen af.NET frameworket - et kig på de vigtigste nyheder i de seneste versioner."

Lignende præsentationer


Annoncer fra Google