35
1 Välkommen till Sommarkollo 2006 2006

Välkommen till Sommarkollo 2006

Embed Size (px)

DESCRIPTION

2006. Välkommen till Sommarkollo 2006. .NET Framework 2.0. Johan Lindfors. Mål med presentationen. Rekommendationer och tips Delegater Resurshantering Nyheter i CLR och språken Generics Anonyma metoder Iteratorer Delade klasser Nyheter i ramverket. Men först lite tips!. - PowerPoint PPT Presentation

Citation preview

Page 1: Välkommen till Sommarkollo 2006

1

Välkommen till Sommarkollo

2006

2006

Page 2: Välkommen till Sommarkollo 2006

Johan Lindfors.NET Framework 2.0

Page 3: Välkommen till Sommarkollo 2006

Mål med presentationen Rekommendationer och tips

Delegater Resurshantering

Nyheter i CLR och språken Generics Anonyma metoder Iteratorer Delade klasser

Nyheter i ramverket

Page 4: Välkommen till Sommarkollo 2006

Men först lite tips! Externa verktyg

IL Disassembler - CTRL+K+Q Reflector - CTRL+K+T

En klass att känna till Stopwatch

Annat i Visual Studio Starta flera projekt Snippets

CodePlex

Page 5: Välkommen till Sommarkollo 2006

Metodik för att hantera kod som genomgår evolution

Visual Studio 2005 levereras med stöd för refactoring-processen Promote Extract Encapsulate Rename

Ytterligare förbättringar...

”Refactoring”

Page 6: Välkommen till Sommarkollo 2006

Datatyper Primitiva

System.Int32 = int System.Boolean = bool Försök att använda .TryParse(...)

Värdetyper Lever på stacken

Referenstyper Lever i ”heapen” med pekare i stacken Operatorn == jämför referenser

Undantaget är string

Page 7: Välkommen till Sommarkollo 2006

Strängar Strängar är ”immutable”

När de väl är skapade kan inte innehållet förändras

StringBuilder Sammanfogar

StringComparer Jämför

Page 8: Välkommen till Sommarkollo 2006

Arrayer Rekommendation:

Returnera alltid en array med 0 element istället för null!

Om du vill skapa ”icke-noll” indexint[] lowerBounds = { 2000, 1 };

int[] lengths = { 6, 4 };

Decimal[,] revenue = (Decimal[,]) Array.CreateInstance( typeof(Decimal), lengths, lowerBounds);

Person[] people = GetPeople();for (int i = 0; i < people.Length; i++){ ... }

Page 9: Välkommen till Sommarkollo 2006

Egenskaper (1/2) ”Vanlig” egenskap

Olika åtkomstnivåer möjligt

private int myProperty;public int MyProperty{ get { return myProperty; } set { myProperty = value; }}

private int myProperty;public int MyProperty{ get { return myProperty; } protected set { myProperty = value; }}

Page 10: Välkommen till Sommarkollo 2006

Egenskaper (2/2) Händelser

Indexerareprivate string[] items = null;public string this[int i]{ get { return items[i]; } set { items[i] = value; }}

private EventHandler myEvent;public event EventHandler MyEvent{ add { myEvent += value; } remove { myEvent-= value; }}

Page 11: Välkommen till Sommarkollo 2006

En samlingsklass för olika typer

Lagra instanser i strukturen

Hämta instanser

public class Stack{ object[] items; public void Push(object item){…} public object Pop(){…}}

Lite om generiska klasser

Stack stack = new Stack();int i;string s = null;stack.Push(i);stack.Push(s); // Inkonsekvens i typer!

string s = (string)stack.Pop(); // Prestandaförlust

Page 12: Välkommen till Sommarkollo 2006

object int

object int

object int

object int

Boxint

Push

Utan Generics

object int

Unboxint

Pop

int

int

int

int

Push

Med Generics

int

Pop

Stack med och utan Generics

Page 13: Välkommen till Sommarkollo 2006

Hur kul är det här egentligen?public class IntegerStack{ int[] items; public void Push(int item){…} public int Pop(){…}}

Utan generiska klasser

public class StringStack{ string[] items; public void Push(string item){…} public string Pop(){…}}

Page 14: Välkommen till Sommarkollo 2006

Mallen

Användningen

public class Stack<T> //T är generisk typparameter{ T[] items; public void Push(T item){...} public T Pop(){...}}

Med generiska klasser

Stack<int> integerStack = new Stack<int>(); integerStack.Push(1);

Stack<string> stringStack = new Stack<string>();stringStack.Push("Hello, World!");

Page 15: Välkommen till Sommarkollo 2006

Flera typer vid definition (”arity”)

Använda aliaser

Begränsningar

public class Point<X,Y>{...}

Point<int,int> point = null;

Detaljer…

using IntegerPoint = Point<int,int>;IntegerPoint point = null;

public class Stack<T> where T: IComparable<T> {...}

public class Node<T> where T: new() { private T item = new T();}

Page 16: Välkommen till Sommarkollo 2006

Kan bara konvertera typparametrar till ”interface”

Ärva från en generisk klass

class MyClass<T>{ void SomeMethod(T t) { ISomeInterface something = (ISomeInterface)t; SomeClass somethingElse = (SomeClass)t; // Fel! }}

Mer detaljer…

public class BaseClass<T>{...}

public class ChildClass: BaseClass<string> {...}

Page 17: Välkommen till Sommarkollo 2006

Generiska metoderpublic class MyClass{ public void MyMethod<T>(T t) { ... }}

MyClass instance = new MyClass();instance.MyMethod(3);instance.MyMethod("Hello, World!");

Mer detaljer…

Page 18: Välkommen till Sommarkollo 2006

Enumeratorer Det är vanligt att iterera genom

samlingar foreach bygger på ett känt mönster. I C# 1.x implementerar vi själva

mönstret. Omständigt och repetetivt om man

vill ha hårdtypning.

public interface IEnumerable { IEnumerator GetEnumerator();}

public interface IEnumerator{ object Current { get; } bool MoveNext(); void Reset();}

Page 19: Välkommen till Sommarkollo 2006

Iteratorer Kompilatormagi för att slippa

implementera IEnumerable-mönstret Nya nyckelord

yield return – producerar nästa element yield break – indekerar avslutad iteration

Implementeras som metod/egenskap IEnumerable IEnumerator IEnumerable< T > IEnumerator< T >

Page 20: Välkommen till Sommarkollo 2006

”Nullable Types” Nullable<T> löser del utmaningar

java.util.Date är en referenstyp (null) System.DateTime är en värdetyp Nullable<DateTime> kan användas

C# har lite ”enklare” syntax

Tänk på: Boxing/unboxing kan såra

prestandan!

int? nInt = null;

int i = nInt ?? -1;// int i = nInt.HasValue() ? n.Value : -1;

Page 21: Välkommen till Sommarkollo 2006

Delade typer Implementera en typ i flera filer

Klasser, strukturer (och gränssnitt i C#) Deklareras med nya nyckelordet partial

En hel del fördelar Stora implementationer kan delas upp Användarkod kan separeras Flera utvecklare kan jobba samtidigt Möjliggör “code-beside” vs “code-

behind” Kan underlätta underhåll och

källkodshantering

Page 22: Välkommen till Sommarkollo 2006

Delegater Ett objekt för händelser och

”callback”internal delegate int GetLength(string msg);

internal class GetLength : System.MulticastDelegate{ // Konstruktor internal GetLength(Object obj, IntPtr method); // Metod med samma signatur som källkoden public virtual int Invoke(string msg); // Asynkront mönster public virtual IAsyncResult BeingInvoke( string msg, AsyncCallback callback, Object obj); public virtual int EndInvoke(IAsyncResult result);}

Page 23: Välkommen till Sommarkollo 2006

Anonyma Metoder Viss kod anropas bara av

delegater Händelsehanterare och “callback”

Anonyma metoder är en lösning Kod för delegater kan skrivas “in-

line” Kan användas istället för en delegat Påminner om Lisp och Python Kräver kompatibla parametrar och

returvärden

Page 24: Välkommen till Sommarkollo 2006

XML WebServices WS-I Basic Profile Stöd för SOAP 1.1 och 1.2 Hanterar generiska typer Egenskaper istället för fält vid proxy Händelsebaserad asynkron

hantering WSDL.EXE

/serverInterface /shareTypes /fields för 1.1 uppträdande

System.Net.NetworkInformation

Page 25: Välkommen till Sommarkollo 2006

ADO.NET Förbättringar på DataSet

Binärserialisering DataTable

DataSet för enbart en tabell Ladda och spara som XML

”Factory”-klasser Generiska dataklasser

Batchning

Page 26: Välkommen till Sommarkollo 2006

WinForms Nya kontroller

“ToolBar” och menyer (“ToolStrip”) Webbläsare Paneler för ”layout” “Splitter Container” “MaskedEdit”

Nya verktyg för hantering av data Datakontroller

DataGridView (ny Grid Control) DataContainer (nu DataConnector)

Page 27: Välkommen till Sommarkollo 2006

ClickOnce Driftsättningsteknik för smarta klienter Paralleller till webbapplikationer

Enkelt för användaren att installera Flexibelt för utvecklaren att uppdatera Applikationer är “isolerade” per användare Kan exekveras med minsta lokala

rättigheter Installeras och exekveras lokalt

Automatisk installation via en länk Kan ske helt utan frågor till användaren

Page 28: Välkommen till Sommarkollo 2006

.NET Remoting IPC som kommunikationskanal

ipc://portNamn/objektNamn Säker kommunikation över TCP

<channel ref=”tcp” secure=”true”/> Versionshantering vid serialisering

[OptionalField] Attribut som används vid serialisering

Stöd för Generics och IPv6

Page 29: Välkommen till Sommarkollo 2006

Säkerhetsuppdateringar SecureString

Använder DPAPI SecurityContext klass System.Security.AccessControl System.Security.Cryptography

DPAPI Kod och bevisbaserad säkerhet

Bevis för installerad i GAC

Page 30: Välkommen till Sommarkollo 2006

Andra förbättringar i FX 2.0 Egenskaper på trådar Semaforer Komprimering av strömmar Konsoluppdateringar HttpListener Seriella portar FTP klasser Debuggningsattribut

Page 31: Välkommen till Sommarkollo 2006

www.microsoft.se/partner/education

Page 32: Välkommen till Sommarkollo 2006

http://blogs.msdn.com/[email protected]

Page 33: Välkommen till Sommarkollo 2006

Exceptions

Page 34: Välkommen till Sommarkollo 2006

Minneshantering

Page 35: Välkommen till Sommarkollo 2006

Asynkron programmering