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

Slides:



Advertisements
Lignende præsentationer
SPBG.  Test driven development  Unit test frameworks  MOSS TDD  Mocking  Design patterns.
Advertisements

Velkommen til Softwarekonstruktion
C# introduktion. using System; Namespace MyFirst { class eks1 { public static void Main() { Console.WriteLine("Hej!"); Console.Write("Skriv dit navn her:
Introduktion til sikkerhed i.NET Mark S. Rasmussen iPaper ApS Part 2.
Februar 2005Sprog-nyheder i C# og VB1 Captator Tlf: Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark.
Microsoft Windows.NET Compact Framework Niels Hilmar Madsen Developer & Platform Strategy Group Microsoft Danmark.
C#: Data Typer. Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies, written in different languages, to.
07 – Kort om OO Introduktion.
Sikkerhed/Otto Knudsen 1 Diagnostics  Debug af web-applikationer.
RT Speciale Evaluering af Java til udvikling af indlejrede realtidssystemer ved brug af en eksisterende ”Java Optimized Processor” (JOP) Speciale – efterår.
Distribueret programmering, specielt Web Services Rasmus D. Lehrmann DM
T1 – OPGAVE 14.2 LINETT & SABRINA Klasse Varer namespace Opgave_14._2 { class Varer { private string vare; private string farve; private double.
Array og ArrayList Et slideshow. Som er sødt.. Hvordan virker ArrayList?  ArrayList NAVN = new ArrayList ();  NAVN.add(”Værdi”);  NAVN.add(index, ”værdi”)
Arkitektur Embedded SQL Tema Persistens
1 JavaServer Faces Copyright © Lund & Bendsen Dynamikken i JSF.
Effective Java items Orange gruppe Thuy, Janne, Mads T.P., Oliver og Sebastian.
C#: Udtryk og metoder. Indhold “With regards to programming statements and methods, C# offers what you would come to expect from a modern OOPL…” Udtryk.
Datastrukturer og Collections Oversigt og forskel imellem Jave og.net Collections library Collection interfaces ArrayList IList interface Hashtable Hashtable.
06 – Java Packages Packages og ClassPath. 2 NOEA2009Java-kursus – Packages og class path Hvad er Packages? En package er en gruppering af relaterede typer.
Item gennemgang  Item: 01 – Static factory methods  Item: 09 – Override hashCode  Item: 17 – Design & document inheritence  Item: 25 – Lists over arrays.
Collectionklasser Klassifikation og anvendelse. Collections Motivation –hvorfor bruge collections? Realisering af en-til-mange relationer –Importer, erklær,
View Procedures Trigger og Function Jesper Tørresø DAB1 E07 1. november 2007.
CodeIgniter Database Brugerinput Form Validation 20101JFH.
Udvikling med Microsoft 2007 Office System Michell Cronberg Microsoft MVP, MCT, MCAD ISV Innovation Day 2006 ServerServer.
Objekter og klasser Applikationsdesign Code Namespace Value og reference typer Reference type Rasmus D. Lehrmann1.
FEN Databaser/DBAdgang21 DB-adgang - Connectionless Connectionless DataAdapter DataSet.
12 – GUI med Swing. 2 NOEA2009Java-kursus – GUI med Swing Designer view Komponenter Frame Properties Inspector.
Mød Microsoft – for udviklere & arkitekter Hvad er smarte klienter? - definitioner og principper.Henrik Lykke Nielsen Captator – de danske.NET eksperter.
WCF service Hostet på website x. Opret tomt web applikations projekt.
Introduktion til.NET- platformen og version 2.0 Michell Cronberg Microsoft MVP
Mød Microsoft – for udviklere & arkitekter Visual Studio, Express og Team System Niels Hilmar Madsen Microsoft
Masterpages/Otto Knudsen 1 Master Pages Master Pages i ASP.NET 2.0.
Eksekvering/Otto Knudsen 1 Udrulning Publicering af en web-applikation.
Introduktion/Otto Knudsen 1 Overblik WebForms ASP.NET.
Distribution af funktionalitet Webservice med WCF x.
Distribution af funktionalitet Webservice med WCF x.
Web service - elementer SOAP (Simple Object Access Protocol) WSDL (Web Service Description language) UDDI (Universal Description, Discovery and Integration)
Web service - elementer SOAP (Simple Object Access Protocol) WSDL (Web Service Description language) UDDI (Universal Description, Discovery and Integration)
ASP.NET Custom Web Controls Deployment. Agenda – ASP.NET Web User Controls Composite Control Rendered Custom Control Deploy en Web Applikation.
Abstrakte klasser og interfaces i Java
Object-Orienteret Programmering og Design Kilde: Joe Hummel.
Programering af mobile enheder Windows Phone Storage.
Henrik Westergaard Hansen ISV Developer Evangelist Microsoft
Niels Ladegaard Beck Microsoft Student Partner Aarhus Universitet.
NOEA/IT - FEN1 Typeparametisering/Genericity Generics i.NET 2 og C#
Begreber og Redskaber 9. Plan for idag I dag: Datastrukturer Tabeller Lister, mængder, maps, grafer Hægtede lister.
N-lags design/Otto Knudsen 1 N-lags Design Definition Motivation.
Session Når man hoster en WCF Service på ASP.NET website, kan man bruge ASP.NET’s Session.
22/092VE/E00/RB1 Introduktion til SQL Datalogi 2VE E00 DIKU Forelæsninger 22/9 og 29/9.
Gruppe sort Morten, Peter, Jesper, Spencer & Støving.
Collectionklasser Ekstra materiale. Collections Motivation – hvorfor bruge collections? Realisering af en-til-mange relationer – Importer, erklær, initialiser.
Begreber og Redskaber 5. Collections i Java 1.2 Framework: samling af datastrukturer og algoritmer som generelt værktøj. En ramme til at arbejde med søgning.
1 HMAK XMLRelationel model og XMLNOEA / PQC 2005 SQLServer og XML Hent data via URL Generering af xml –Raw –Auto –Explicit Hent data via template Evt.
Reliable Architecture Ved Henrik Bærbak Christensen Reflective Architectures Emne: reflective architecture overview 11 december 2009.
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
1 XMLRelationel model og XMLNOEA / FEN 2007 Relationelle databaser og XML Overblik. –For detaljer se PQC: sqlOgXml.ppt og SqlServerOgXml.ppt RDB-struktur.
Interfaces – brug. Overblik Tidligere: –Interfaces Comparable gør det muligt at bruge Collections metoderne –min, max, sort, … –Algoritmemønstre Find.
Lektion 7 Læsestof: Kopier fra Caranno
Masterpages/Otto Knudsen 1 Navigation på webstedet Kontroller til navigation mellem siderne på webstedet.
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
Repetition: Introduktion til OOP med C# og .NET
Comparable Students German Students Composite Pattern State Pattern Observer Pattern Collections Interfaces Abstrakte klasser Design Patterns.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
C#: Data Typer. 2 Nordjyllands Erhvervakademi Indhold: “.NET is designed around the CTS, or Common Type System. The CTS is what allows assemblies,
9. Interfaces. 2 Nordjyllands Erhvervakademi Objectives “Good class design starts with good application design — how many classes, do they relate.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Præsentationens transcript:

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: Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark Mobil:

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

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

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

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

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#

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

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 

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 Int Nullable(Of Int32) / Nullable True ??? False Ikke Nothing Nothing Value HasValue Udefineret værdi

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#

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)

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

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#

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

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?

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

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 Overblik over udviklingen af.NET frameworket WPF arkitekturen

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

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 Overblik over udviklingen af.NET frameworket Properties Custom draw, owner draw eller custom kontrol Properties Custom kontrol Styling

Windows Workflow Foundation (WF) oktober Overblik 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

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 Overblik 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

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#

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

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=" " } 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=" " } 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

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=" " }; 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=" " }; 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#

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#

oktober 2007Overblik over udviklingen af.NET frameworket27 Anonyme metoder (C# - 2.0) MinDelegateType delCalc; delCalc = delegate { return ; }; MessageBox.Show(" = " + 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(" = " + delCalc(2, 2).ToString()); MinDelegateType delCalc; delCalc = delegate { return ; }; MessageBox.Show(" = " + 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(" = " + 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 / = " + 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 / = " + delCalc(2, 2).ToString()); } C#

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

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

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

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#

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

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#

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

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

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#

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

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#

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