Februar 2005Sprog-nyheder i C# og VB1 Captator Tlf: 8620 4242 www.captator.dk Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark.

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:
Oktober 2007Overblik over udviklingen af.NET frameworket1 Overblik over udviklingen af.NET frameworket - et kig på de vigtigste nyheder i de seneste versioner.
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.
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”)
Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
Effective Java items Orange gruppe Thuy, Janne, Mads T.P., Oliver og Sebastian.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
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.
Datastrukturer Simple-type structs
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.
Programmeringsteknologi: Lektion 1
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.
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
Objekter og klasser Applikationsdesign Code Namespace Value og reference typer Reference type Rasmus D. Lehrmann1.
12 – GUI med Swing. 2 NOEA2009Java-kursus – GUI med Swing Designer view Komponenter Frame Properties Inspector.
Hvordan man skriver koden.
Mød Microsoft – for udviklere & arkitekter Hvad er smarte klienter? - definitioner og principper.Henrik Lykke Nielsen Captator – de danske.NET eksperter.
Tietgen Skolen Syntaks: while ( betingelse for loop ) statement; Eksempel: int tal = 0; while ( tal/3 != 4 ) { System.Console.WriteLine(tal); tal = tal.
WCF service Hostet på website x. Opret tomt web applikations projekt.
Tråde og synkronisering. Tråde To typer tråde Dedikerede tråde -programmør opretter og tilknytter metode -”kører tråd-metoden (job) én gang” Tråd pulje.
Introduktion til.NET- platformen og version 2.0 Michell Cronberg Microsoft MVP
Eksekvering/Otto Knudsen 1 Udrulning Publicering af en web-applikation.
Distribution af funktionalitet Webservice med WCF x.
Distribution af funktionalitet Webservice med WCF x.
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
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.
Session Når man hoster en WCF Service på ASP.NET website, kan man bruge ASP.NET’s Session.
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.
Maj 2003Bedre brugergrænseflader med multithreading1 Carsten Juel Andersen Softwarearkitekt Mobil: Captator Tlf:
Begreber og Redskaber 5. Plan for idag Overblik over klasser,objekter,nedarvning –Repetition fra Dat A/Indledende programmering –Centrale begreber om.
Forelæsning 3.1 Collections Javas for-each løkke
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
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
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.
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.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
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 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Forelæsning Uge 4 – Mandag
Præsentationens transcript:

februar 2005Sprog-nyheder i C# og VB1 Captator Tlf: Henrik Lykke Nielsen Softwarearkitekt, Microsoft Regional Director for Denmark Mobil:

februar 2005Sprog-nyheder i C# og VB2 Agenda Generics Generiske metoder Generiske collections Nullable typer Partielle typer Delegate inferens (C#) Anonyme metoder (C#) Iteratorer (C#) Access modifiers for properties Statiske klasser (C#) Globalt namespace scope Value typer (VB) Using Operator overloading (VB) Continue, eksplicitte array bounds, IsNot, TryCast & XML kommentarer (VB) My oh my

februar 2005Sprog-nyheder i C# og VB3 Ikke-generiske metoder Ønske: At kunne tage maksimum af to værdier Mulig løsning: Kan lave specifikke funktioner Svært at lave en komplet og udtømmende løsning Public Shared Function Max(ByVal a As Long, ByVal b As Long) As Long '... End Sub Public Shared Function Max(ByVal a As String, ByVal b As String) As String '... End Sub Public Shared Function Max(ByVal a As Long, ByVal b As Long) As Long '... End Sub Public Shared Function Max(ByVal a As String, ByVal b As String) As String '... End Sub public long Max(long a, long b) { //... } public string Max(string a, string b) { //... } public long Max(long a, long b) { //... } public string Max(string a, string b) { //... } VB C#

februar 2005Sprog-nyheder i C# og VB4 Ikke-generiske metoder Eller en enkelt generel funktion Public Shared Function MaxObject(ByVal a As Object, _ ByVal b As Object) As Object If a > b Then Return a Else Return b End If End Sub Public Shared Function MaxObject(ByVal a As Object, _ ByVal b As Object) As Object If a > b Then Return a Else Return b End If End Sub public object MaxObject(object a, object b) { if (a > b) { return a; } else { return b; } public object MaxObject(object a, object b) { if (a > b) { return a; } else { return b; } Kan ikke kompileres, da System.Object ikke kan sammenlignes ved hjælp af > Kompileringsfejl   VB C# Vilkårligt valgt at a return b

februar 2005Sprog-nyheder i C# og VB5 Ikke-generiske metoder Kan sammenligne vha. IComparable Public Function MaxIComparable(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 Public Function MaxIComparable(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 public object MaxIComparable(System.IComparable a, System.IComparable b) { if (a.CompareTo(b) > 0) //Kan give en run-time fejl return a; else return b; } public object MaxIComparable(System.IComparable a, System.IComparable b) { if (a.CompareTo(b) > 0) //Kan give en run-time fejl return a; else return b; } VB C# Vil give en run-time fejl, ved kald med to forskellige typer - for eksempel et tal og en streng

februar 2005Sprog-nyheder i C# og VB6 Generiske metoder Definition af generisk metode Brug af generisk metode public T Max (T a, T b) where T : System.IComparable { if (a.CompareTo(b) > 0) return a; else return b; } public T Max (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 = Max (i, j); string s = "Alfa"; string t = "Omega”; string r = Max (s, t); int i = 17; int j = 42; int k = Max (i, j); string s = "Alfa"; string t = "Omega”; string r = Max (s, t); C#

februar 2005Sprog-nyheder i C# og VB7 Generiske metoder Definition af generisk metode Brug af generisk metode Public Function Max(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 Max(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 = Max(Of Integer)(i, j) Dim s As String = "Alfa" Dim t As String = "Omega" Dim r As String = Max(Of String)(s, t) Dim i As Integer = 17 Dim j As Integer = 42 Dim k As Integer = Max(Of Integer)(i, j) Dim s As String = "Alfa" Dim t As String = "Omega" Dim r As String = Max(Of String)(s, t) VB

februar 2005Sprog-nyheder i C# og VB8 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

februar 2005Sprog-nyheder i C# og VB9 Generics - constraints Reducerer generaliteten men øger anvendeligheden Alle specificerede restriktioner på den generiske type skal være opfyldt public class MinType where T2 : IComparable, IFormattable, new() Public Class MinType(Of T1, T2 As {IComparable, IFormattable, New}) VB En klasse  Typen skal være nedarvet fra klassen Keywordet “Class”  Typen skal være en reference type Keywordet “Structure/struct”  Typen skal være en value type Et interface  Typen skal implementere interfacet Keywordet “New”  Typen skal have en public default konstruktør En klasse  Typen skal være nedarvet fra klassen Keywordet “Class”  Typen skal være en reference type Keywordet “Structure/struct”  Typen skal være en value type Et interface  Typen skal implementere interfacet Keywordet “New”  Typen skal have en public default konstruktør C#

februar 2005Sprog-nyheder i C# og VB10 Hent koden på (både VB og C#) Generiske metoder C#

februar 2005Sprog-nyheder i C# og VB11 Hent koden på (både VB og C#) Generiske metoder VB

februar 2005Sprog-nyheder i C# og VB12 Generiske interfaces IComparable int CompareTo(object obj) IComparable int CompareTo(T other) IComparable int CompareTo(int other) IComparable Function CompareTo(obj As Object) As Integer IComparable(Of T) Function CompareTo(other As T) As Integer IComparable(Of Integer) Function CompareTo(other As Integer) As Integer VB C#

februar 2005Sprog-nyheder i C# og VB13 Collections - typeløse F.eks. ArrayList, HashTable, Queue, SortedList, Stack Generelle på bekostning af typecheck Eksplicitte typecasts ved brug => Usikker kode med dårlig performance Dim arr As New ArrayList, i As Integer arr.Add(17): arr.Add("Captator") : arr.Add(New Form1) i = CInt(arr(0)) i = CInt(arr(1)) i = CInt(arr(2)) Dim arr As New ArrayList, i As Integer arr.Add(17): arr.Add("Captator") : arr.Add(New Form1) i = CInt(arr(0)) i = CInt(arr(1)) i = CInt(arr(2)) } medfører System.InvalidCastException VB ArrayList arr = new ArrayList(), int i; arr.Add(17); arr.Add("Captator"); arr.Add(new Form1()) i = (int) arr(0); i = (int) arr(1); i = (int) arr(2); ArrayList arr = new ArrayList(), int i; arr.Add(17); arr.Add("Captator"); arr.Add(new Form1()) i = (int) arr(0); i = (int) arr(1); i = (int) arr(2); C# } medfører System.InvalidCastException

februar 2005Sprog-nyheder i C# og VB14 Collections - typestærke F.eks. BitArray, StringCollection, DataColumnCollection => Sikker kode men omfattende udvikling Public Class FormCollection Implements System.Collections.IEnumerable Public Sub Add(ByVal frm As System.Windows.Forms.Form) Default Public Property Item(ByVal index As Integer) As Forms.Form '... End Class Dim forms As New FormCollection, i As Integer, s As String forms.Add(17) : forms.Add("Captator") i = forms(0) : s = forms(1) Public Class FormCollection Implements System.Collections.IEnumerable Public Sub Add(ByVal frm As System.Windows.Forms.Form) Default Public Property Item(ByVal index As Integer) As Forms.Form '... End Class Dim forms As New FormCollection, i As Integer, s As String forms.Add(17) : forms.Add("Captator") i = forms(0) : s = forms(1) } medfører kompile-fejl public class FormCollection : System.Collections.IEnumerable { public void Add(System.Windows.Forms.Form frm) public Forms.Form this[int index] //... } FormCollection forms = New FormCollection(); int i; string s; forms.Add(17); forms.Add("Captator"); i = forms[0]; s = forms[1]; public class FormCollection : System.Collections.IEnumerable { public void Add(System.Windows.Forms.Form frm) public Forms.Form this[int index] //... } FormCollection forms = New FormCollection(); int i; string s; forms.Add(17); forms.Add("Captator"); i = forms[0]; s = forms[1]; VB C# } medfører kompile-fejl

februar 2005Sprog-nyheder i C# og VB15 Collections - generiske System.Collections.Generic Dictionary, LinkedList, List, Queue, SortedList, Stack IDictionary, IList, IEnumerator, ICollection, IComparer Typestærke og generelle Ingen eksplicitte typecasts ved brug => Type-sikker kode og stor mulighed for genbrug Dim col As New System.Collections.Generic.List(Of Integer) col.Add(17) col.Add(42) col.Add("Hello") Dim i As Integer = col(0) 'Der sker ingen typecast (boxing) Dim col As New System.Collections.Generic.List(Of Integer) col.Add(17) col.Add(42) col.Add("Hello") Dim i As Integer = col(0) 'Der sker ingen typecast (boxing) } medfører kompile-fejl System.Collections.Generic.List col = new System.Collections.Generic.List (); col.Add(17); col.Add(42); col.Add("Hello"); int i = col[0]; //Der sker ingen typecast (boxing) System.Collections.Generic.List col = new System.Collections.Generic.List (); col.Add(17); col.Add(42); col.Add("Hello"); int i = col[0]; //Der sker ingen typecast (boxing) } medfører kompile-fejl VB C#

februar 2005Sprog-nyheder i C# og VB16 Collections – stacks Object int Object int Object int Object int Box int Push Uden generics Object int Unbox int Pop int Push Med generics int Pop

februar 2005Sprog-nyheder i C# og VB17 Generiske collections - PriorityQueue Hent koden på (både VB og C#)

februar 2005Sprog-nyheder i C# og VB18 Nullable typer Alle value typer kan gøres nullable ved anvendelse af System.Nullable / System.Nullable(Of T) Struktur der kombinerer T og en boolean Value – readonly property (value-type) HasValue - readonly property (boolean) 123 Int Nullable / Nullable(Of Int32) True ??? False Ikke null/Nothing null / Nothing Value HasValue Udefineret værdi

februar 2005Sprog-nyheder i C# og VB19 Nullable typer public struct Nullable where T: struct { private T value; private bool hasValue; public Nullable(T value) public T GetValueOrDefault(T defaultValue) public T Value { get {…} } public bool HasValue { get {…} } //... } public struct Nullable where T: struct { private T value; private bool hasValue; public Nullable(T value) public T GetValueOrDefault(T defaultValue) public T Value { get {…} } public bool HasValue { get {…} } //... } Public Structure Nullable(Of T As Structure) Private value As T Private hasValue As Boolean Public New(value As T) Public Function GetValueOrDefault(defaultValue As T) As T Public ReadOnly Property Value() As T Public ReadOnly Property HasValue() As Boolean '... End Structure Public Structure Nullable(Of T As Structure) Private value As T Private hasValue As Boolean Public New(value As T) Public Function GetValueOrDefault(defaultValue As T) As T Public ReadOnly Property Value() As T Public ReadOnly Property HasValue() As Boolean '... End Structure VB C#

februar 2005Sprog-nyheder i C# og VB20 Nullable typer 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; 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 VB C#

februar 2005Sprog-nyheder i C# og VB21 Nullable typer C# syntaktisk sukker Syntaktisk sukkerSvarende til int? z1;System.Nullable z; int? y1 = 17;System.Nullable y = 17; int? x1 = new int?(17);System.Nullable x = new System.Nullable (17); y = x ?? 13;y = x.GetValueOrDefault(13); int? z = (int?) new double?(17.42); System.Nullable z = (System.Nullable ) new System.Nullable (17.42); C#

februar 2005Sprog-nyheder i C# og VB22 Partielle typer Typer kan deles over flere filer VB: Klasser, structures C#: Klasser, structs, interfaces Bruges typisk i forbindelse med kodegenerering “Skjuler” det genererede Muliggør regenerering uden overskrivning af tilføjelser Windows.Forms.Form, Windows.Forms.UserControl, Web.UI.Page, Web.UI.UserControl, System.Data.DataSet Angives med type-modifieren partial Opdelinger i partielle typer har ingen run-time betydning Members, interfaces og attributter kombineres Visibilitet og basis klasse skal stemme overens Intellisense betragter den samlede type

februar 2005Sprog-nyheder i C# og VB23 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#

februar 2005Sprog-nyheder i C# og VB24 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

februar 2005Sprog-nyheder i C# og VB25 Delegate inferens private delegate int MinDelegateType(int a, int b); private int Addition(int a, int b) { return a + b; } private int Multiplikation(int a, int b) { return a * b; } private int Difference(int a, int b) { return a - b; } private int Division(int a, int b) { return a / b; } private int Beregn(MinDelegateType del) { return del(119, 7); } private delegate int MinDelegateType(int a, int b); private int Addition(int a, int b) { return a + b; } private int Multiplikation(int a, int b) { return a * b; } private int Difference(int a, int b) { return a - b; } private int Division(int a, int b) { return a / b; } private int Beregn(MinDelegateType del) { return del(119, 7); } C# MinDelegateType delCalc; delCalc = new MinDelegateType(Addition); MessageBox.Show(" = " + delCalc(17, 42).ToString()); delCalc = (MinDelegateType) Multiplikation; MessageBox.Show("7 * 17 = " + delCalc(7, 17).ToString()); delCalc = Difference; MessageBox.Show(" = " + delCalc(59, 17).ToString()); MessageBox.Show("119 / 7 = " + Beregn(Division).ToString()); MinDelegateType delCalc; delCalc = new MinDelegateType(Addition); MessageBox.Show(" = " + delCalc(17, 42).ToString()); delCalc = (MinDelegateType) Multiplikation; MessageBox.Show("7 * 17 = " + delCalc(7, 17).ToString()); delCalc = Difference; MessageBox.Show(" = " + delCalc(59, 17).ToString()); MessageBox.Show("119 / 7 = " + Beregn(Division).ToString()); VB har allerede delegate inferens i den nuværende version VS2003 syntaks

februar 2005Sprog-nyheder i C# og VB26 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#) delegate [(parameter-list)] { anonymous-method-block }

februar 2005Sprog-nyheder i C# og VB27 Anonyme metoder (C#) 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#

februar 2005Sprog-nyheder i C# og VB28 Iteratorer (C#) – enumerable collections foreach (int i in list) { GørNoget(i); } foreach (int i in list) { GørNoget(i); } Enumerator en = ((IEnumerable) list).GetEnumerator(); while (en.MoveNext()) { int i = (int) en.Current; GørNoget(i); } Enumerator en = ((IEnumerable) list).GetEnumerator(); while (en.MoveNext()) { int i = (int) en.Current; GørNoget(i); } Implementeres som... private class MinEnumerator : IEnumerator { private int _index = -1; private MinListe _list; MinEnumerator(MinListe list) { _list = list } object IEnumerator.Current { get { /*…*/ } } bool IEnumerator.MoveNext() { /*…*/ } // … } private class MinEnumerator : IEnumerator { private int _index = -1; private MinListe _list; MinEnumerator(MinListe list) { _list = list } object IEnumerator.Current { get { /*…*/ } } bool IEnumerator.MoveNext() { /*…*/ } // … } Hvor enumeratoren kan være implementeret á la... C#

februar 2005Sprog-nyheder i C# og VB29 Iteratorer (C#) En iterator blok Indeholder en eller flere yields yield return leverer den næste værdi yield break afslutter itereringen Kan udgøre en metode, der returnerer IEnumerable eller IEnumerator IEnumerator IEnumerable.GetEnumerator() { yield return 17; yield return 42; } IEnumerator IEnumerable.GetEnumerator() { yield return 17; yield return 42; } IEnumerator IEnumerable.GetEnumerator() { for (int n = 0; n < _list.Length; n++) { yield return _list[n]; } IEnumerator IEnumerable.GetEnumerator() { for (int n = 0; n < _list.Length; n++) { yield return _list[n]; } Eksempel fra implementationen af en collection type C#

februar 2005Sprog-nyheder i C# og VB30 Iteratorer (C#) opremser1.GetEnumerator-metoden returnerer en instans af en compiler-genereret enumerator-klasse class MinUnderligeCollection { public IEnumerable HitMedDem(int fra, int til) { for (int n = fra; n <= til; n++) { yield return n; } } class MinUnderligeCollection { public IEnumerable HitMedDem(int fra, int til) { for (int n = fra; n <= til; n++) { yield return n; } } MinUnderligeCollection col = new MinUnderligeCollection(); IEnumerable opremser1 = col.HitMedDem(1, 3); IEnumerable opremser2 = col.HitMedDem(6, 8); foreach (int i in opremser1) { foreach (int j in opremser2) { /*…*/ } } MinUnderligeCollection col = new MinUnderligeCollection(); IEnumerable opremser1 = col.HitMedDem(1, 3); IEnumerable opremser2 = col.HitMedDem(6, 8); foreach (int i in opremser1) { foreach (int j in opremser2) { /*…*/ } } Hver iterator har sin egen state HitMedDem eksekveres ikke umiddelbart, men et enumerable objekt returneres C#

februar 2005Sprog-nyheder i C# og VB31 Access modifiers for properties En property kan have (max) én access modifier Enten get- eller set-delen kan have en mere begrænset access modifier Private _coolness As Integer Public Property Coolness() As Integer Get Return _coolness End Get Friend Set(ByVal Value As Integer) _coolness = Value End Set End Property Private _coolness As Integer Public Property Coolness() As Integer Get Return _coolness End Get Friend Set(ByVal Value As Integer) _coolness = Value End Set End Property private int _coolness; public int Coolness { get { return _coolness; } internal set { _coolness = value; } private int _coolness; public int Coolness { get { return _coolness; } internal set { _coolness = value; } VB C#

februar 2005Sprog-nyheder i C# og VB32 Statiske klasser (C#) Library klasser defineres typisk med Sealed (C#) / NotInheritable (VB) Privat default konstruktør, ingen public konstruktører Kan kun indeholde statiske members Kan ikke nedarve eller implementere interfaces Kan ikke bruges som type for variable,... Eksempler: System.Console, System.Environment static class StatiskKlasse { public static int Svaret(string spørgsmål) { return 42; } static class StatiskKlasse { public static int Svaret(string spørgsmål) { return 42; } Minder meget om VBs Modules C#

februar 2005Sprog-nyheder i C# og VB33 Global Gør det muligt at referere elementer, som er ”holdt ude” af namespace-scope Især interessant ved kodegenerering VBC#

februar 2005Sprog-nyheder i C# og VB34 De manglende value typer i VB VB keyword C# keyword CLR type Størrelse Boolean bool System.Boolean 1 bit true eller false sbyte System.SByte 8 bit -128 til 127 Byte byte System.Byte 8 bit 0 til 255 Char char System.Char 16 bits (Unicode) Short short System.Int16 16 bits til ushort System.UInt16 16 bits 0 til Integer int System.Int32 32 bits til uint System.UInt32 32 bits 0 til Long long System.Int64 64 bits til ulong System.UInt64 64 bits 0 til Single float System.Single 32 bits 1,5E-45 til 3,4E38 med 7 cifre Double double System.Double 64 bits 5,0E-324 til 1,7E308 med cifre Decimal decimal System.Decimal 128 bits 1,0E-28 til 7,9E betydende cifre UInteger ULong UShort SByte

februar 2005Sprog-nyheder i C# og VB35 Using statement Garanterer disposing af ressourcer ved exit af using-blokken Svarer til en Try…Finally med kald af Dispose i Finally-blokken Using fs As New System.IO.FileStream(path, FileMode.Append) For i As Integer = 0 To fs.Length fs.ReadByte() Next End Using Using fs As New System.IO.FileStream(path, FileMode.Append) For i As Integer = 0 To fs.Length fs.ReadByte() Next End Using Using findes allerede i C# VB

februar 2005Sprog-nyheder i C# og VB36 Continue statement Hop til næste iteration af den specificerede løkke Syntaks: Dim j As Integer For i As Integer = 1 To 17 j = 0 Do While j < 117 j += 1 If i + j = 17 Then Continue Do End If If i + j = 42 Then Continue For End If Loop Next Dim j As Integer For i As Integer = 1 To 17 j = 0 Do While j < 117 j += 1 If i + j = 17 Then Continue Do End If If i + j = 42 Then Continue For End If Loop Next Continue { Do | For | While } Continue findes allerede i C# VB

februar 2005Sprog-nyheder i C# og VB37 Eksplicitte array bounds VB6 VB.NET (VS2002 & VS2003) VB.NET (VS2005) Meeen – arrays er stadig kun nul-baserede Dim arr(10) As Integer Dim arr(42) As Integer Dim arr(0 To 42) As Integer Dim arr(1 To 17) As Integer Dim arr(-42 To -17) As Integer Dim arr(42) As Integer Dim arr(0 To 42) As Integer Dim arr(1 To 17) As Integer Dim arr(-42 To -17) As Integer Dim arr(0 To 10) As Integer VB

februar 2005Sprog-nyheder i C# og VB38 IsNot, TryCast & XML kommentarer IsNot operator TryCast XML kommentarer ''' ''' Funktion der kan give det endegyldige svar på vilkårlige spørgsmål. ''' ''' Vilkårligt spørgsmål. ''' Det endegyldige svar. Public Shared Function Svaret(ByVal spørgsmål As String) As Integer Return 42 End Function ''' ''' Funktion der kan give det endegyldige svar på vilkårlige spørgsmål. ''' ''' Vilkårligt spørgsmål. ''' Det endegyldige svar. Public Shared Function Svaret(ByVal spørgsmål As String) As Integer Return 42 End Function XML kommentarer findes allerede i C# If Not obj1 Is obj2 Then End If If Not obj1 Is obj2 Then End If If obj1 IsNot obj2 Then End If If obj1 IsNot obj2 Then End If Svarer til != i C# Dim per1 As Person per1 = TryCast(obj, Person) Dim per1 As Person per1 = TryCast(obj, Person) Dim per As Person If TypeOf per Is Person Then per = CType(obj, Person) Else per = Nothing End If Dim per As Person If TypeOf per Is Person Then per = CType(obj, Person) Else per = Nothing End If VB Svarer til as i C#

februar 2005Sprog-nyheder i C# og VB39 Hvad er der galt med denne kode? Der er intet galt med koden... men den forudsætter operator overloading (i dette tilfælde af implicit og eksplicit typekonvertering) Unære operatorer +, -, IsFalse, IsTrue, Not Binære operatorer +, -, *, /, \, &, ^, >>,, >, >=, <, <=, And, Like, Mod, Or, Xor CType: Widening eller Narrowing Dim f1, f2 As FaultyString f1 = "Captator" f2 = " - de danske.NET eksperter" Dim s As String s = CStr(f1 + f2) Dim f1, f2 As FaultyString f1 = "Captator" f2 = " - de danske.NET eksperter" Dim s As String s = CStr(f1 + f2) VB Operatoroverloading findes allerede i C# Operatoroverloading findes allerede i C#

februar 2005Sprog-nyheder i C# og VB40 Operator overloading Public Structure Rational Public Num As Integer Public Denum As Integer 'Og en masse yderligere kode... Public Overrides Function ToString() As String If Denum = 1 Then Return Num.ToString() _ Else Return Num.ToString() + "/" + Denum.ToString() End If End Function Public Shared Operator +(ByVal r1 As Rational, ByVal r2 As Rational) As Rational Return New Rational(r1.Num * r2.Denum + r2.Num * r1.Denum, r1.Denum * r2.Denum) End Operator Public Shared Operator -(ByVal r1 As Rational, ByVal r2 As Rational) As Rational Return New Rational(r1.Num * r2.Denum - r2.Num * r1.Denum, r1.Denum * r2.Denum) End Operator Public Overrides Function Equals(ByVal obj As Object) As Boolean Dim r As Rational = CType(obj, Rational) Return Num = r.Num And Denum = r.Denum End Function Public Shared Operator =(ByVal r1 As Rational, ByVal r2 As Rational) As Boolean Return r1.Equals(r2) End Operator End Structure Public Structure Rational Public Num As Integer Public Denum As Integer 'Og en masse yderligere kode... Public Overrides Function ToString() As String If Denum = 1 Then Return Num.ToString() _ Else Return Num.ToString() + "/" + Denum.ToString() End If End Function Public Shared Operator +(ByVal r1 As Rational, ByVal r2 As Rational) As Rational Return New Rational(r1.Num * r2.Denum + r2.Num * r1.Denum, r1.Denum * r2.Denum) End Operator Public Shared Operator -(ByVal r1 As Rational, ByVal r2 As Rational) As Rational Return New Rational(r1.Num * r2.Denum - r2.Num * r1.Denum, r1.Denum * r2.Denum) End Operator Public Overrides Function Equals(ByVal obj As Object) As Boolean Dim r As Rational = CType(obj, Rational) Return Num = r.Num And Denum = r.Denum End Function Public Shared Operator =(ByVal r1 As Rational, ByVal r2 As Rational) As Boolean Return r1.Equals(r2) End Operator End Structure VB

februar 2005Sprog-nyheder i C# og VB41 My object hierarkiet (VB) My Application Computer User DataSources Forms WebServices — Applikationstitel, version, description, … — Registry, Printer, Audio, FileSystem, Mail, … — User name, group, domain, … — Samling af datasources i projektet — Samling af forme i projektet — Samling af web services refereret i projektet My.Application.Version.ToString() 'Svarende til... System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() My.Application.Version.ToString() 'Svarende til... System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString() VB

februar 2005Sprog-nyheder i C# og VB42 Spørgsmål nyheder, artikler, information,...