microsoft academic program c# 2.0 was gibts da neues? student technology conference 2005

43
Microsoft Academic Program C# 2.0 Was gibt’s da Neues? Student Technology Conference 2005

Upload: jurian-mueth

Post on 05-Apr-2015

105 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic Program

C# 2.0 Was gibt’s da Neues?

Student Technology Conference 2005

Page 2: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005

C# 2.0 – Was gibt’s da Neues?

• Bernd Marquardt• MVP, RD• Software und Consulting• [email protected]

Page 3: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Agenda

• Neuerungen in C# 2.0– Generische Datentypen– Iteratoren– Anonyme Methoden– Partielle Klassen

• Sonstige Erweiterungen in C# 2.0• Kompatibilität zu C# 1.0• Zusammenfassung

Page 4: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Neuerungen in C# 2.0

• C# ist gegenüber der alten Version erweitert worden

• Die Programmiersprache als solches hat sich aber nicht geändert– Wir müssen nicht umlernen– Wir müssen nur dazulernen

• Größtes Feature in C# 2.0:– Generische Typen – Für die Template-Anhänger der C++-Gemeinde

ein wichtiger Punkt– Für VB.NET, C#, C++/CLI

Page 5: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Generische Datentypen

• Generische Typen machen es möglich, dass Klassen, Strukturen, Interfaces, Delegates und Methoden passend zum Typ der Daten, die sie verwalten sollen, erzeugt werden.

• Einfaches Beispiel: Sortierung– Man kann int, string, double, ... sortieren– Mit generischen Typen schreibt man nur eine

Sortierungs-Methode– Diese kann dann mit den unterschiedlichen Typen

„angewendet“ werden

Page 6: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Einführung

• Warum braucht man generische Typen?– Die Standard-Collection-Klassen speichern die

Daten immer als object– Beim Auslesen der Daten muss explizit gecastet

werden• Da können Fehler passieren evtl. erst zur Laufzeit• Kostet Performance (Boxing, Unboxing, Typprüfung)

• Beispiel: Stack-CollectionStack stack = new Stack();stack.Push(3);int i = (int)stack.Pop();

Page 7: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Programmierung

• Erstellung einer Klasse mit einem sogenannten „Typenparameter“– Wird in spitzen Klammern angegeben– Wird wie ein normaler Typ benutzt

• Beispiel: Stack-Klasse

public class Stack<T>{ T[] items; int count;

public void Push(T item) { ... }

public T Pop() { ... }}

Page 8: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Anwendung

• Wenn die generische Klasse Stack<T> benutzt werden soll, dann wird <T> überall durch den gewünschten Typ ersetzt– Es handelt sich aber nicht einfach um eine Textersetzung– Die neue Klasse heißt „konstruierter Typ“– Für jeden anderen Typ wird der Code neu „expandiert“

• Beispiel: Mit einer Stack-Klasse

Stack<int> stack = new Stack<int>();stack.Push(3);int i = stack.Pop(); public class Stack

{ int[] items; int count; public void Push(int item) { ... } public int Pop() { ... }}

public class Stack{ int[] items; int count; public void Push(int item) { ... } public int Pop() { ... }}

Page 9: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Anwendung

• Der konstruierte Typ Stack<int> hat den festen Typ int

• Die Daten werden im konstruierten Typ tatsächlich als int gespeichert

• Typ-Umwandlungen sind deshalb nicht mehr erforderlich

• Nachteil:– Es wird mehr Code (im Speicher) erzeugt, wenn

der generische Typ mehrfach expandiert wirdStack<string> sts = new Stack<string>();Stack<double> std = new Stack<double>();Stack<DateTime> stdt = new Stack<DateTime>();

Page 10: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Demo 1

• Programmierung einer Stack-Klasse als generischer Typ

• Push- und Pop-Methode implemetieren• Einfache Variante mit festem Array ohne

Prüfung der Indices• Anwendung

Page 11: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Generische Klassen

• Generische Typ-Deklarationen können beliebig viele Typ-Parameter enthalten

• Beispiel:

public class Directory<K,V>{ public void Add(K key, V value) { ... } public V this[K key] { ... }}//---------------------------------------------Directory<string,Customer> dict = new Directory<string,Customer>();dict.Add(„Bernd“, new Customer());Customer c = dict[„Peter“];

Page 12: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Einschränkungen

• Einschränkungen (oder Constraints) definieren für die Typ-Parameter bestimmte Einschränkungen (Interfaces, struct, class, new())

• Beispiel:– Für einen Typ-Parameter solle die Methode CompareTo

benutzt werden– Dann muss der Typ-Parameter diese Methode (über die

Schnittstelle IComparable) implementieren– Dies wird mit folgender Einschränkung sichergestellt (zur

Übersetzungszeit):

public class Directory<K,V> where K: IComparable{ ...}

Page 13: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Einschränkungen

• Es gibt verschiedene Einschränkungs-möglichkeiten:– …where TYP : struct TYP muss ein

Wertetyp sein– …where TYP : class TYP muss ein

Referenztyp sein– …where TYP : IInterface Der Typ muss

das Interface implementieren– …where TYP : new( ) Parameterloser

Konstruktor muss im Typ vorhanden sein • Diese Einschränkung muss hinten stehen

• Einschränkungen sind mit allen Typparametern möglich

Page 14: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Demo 2

• Benutzung der Einschränkung IComparable im generischen Typ Directory– Benutzung von Klassen, welche die Schnittstelle

implementieren (z.B. string)– Benutzung von eigenen Klassen, welche die

Schnittstelle implementieren (Klasse: TestComp)– Die Benutzung von Klassen, welche die Schnittstelle

nicht implementieren wird zur Übersetzungszeit zurückgewiesen (Klasse: Test)

• Hinweis: Es können mehrere Einschränkungen angegeben werden

Page 15: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Demo 3: „Geschachtelte“ Generics

• Ineinandergeschachtelte Deklarationen von generischen Typen sind ebenfalls möglich

• Beispiel: Generischer Typ Vector– Enthält einen Indexer

• Deklaration eines Vectors der wiederum Vector-Instanzen vom Typ int enthält– Funktioniert auch als „jagged array“

Vector<Vector<int>> vec = new Vector<Vector<int>>();...// Benutzung wie ein C++-Arrayvec[1][3] = 3;int ii = vec[1][3];

Page 16: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Generische Methoden

• In Methodenaufrufen können generische Typen als Parameter verwendet werden

• Man nennt diese Methoden: generische Methoden• Beispiel 1: Funktioniert nur mit Stack<int>

void PushMultiple(Stack<int> stack, params int [] values){ foreach(int i in values) { stack.Push(i); }}//------------------------------------------------------Stack <int> stack = new Stack<int>();PushMultiple(stack, 1, 2, 3, 4);

Page 17: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Generische Methoden

• Damit PushMultiple mit allen Typen funktioniert, muss eine generische Methode implementiert werden

• Beispiel 2: Funktioniert immer

void PushMultiple<T>(Stack<T> stack, params T [] values){ foreach(T val in values) { stack.Push(val); }}//------------------------------------------------------Stack<int> stack = new Stack<int>();PushMultiple<int>(stack, 1, 2, 3, 4);// PushMultiple(stack, 1, 2, 3, 4);

Page 18: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Iteratoren

• Bisher waren die Implementierung von Enumeratoren nicht so einfach (Positionierung!)

• Iteratoren ermöglichen jetzt eine ganz einfache Implementierung der Methode GetEnumerator()

• Interface implementieren: IEnumerable• Dadurch kann man mit foreach sehr leicht

durch die Collection iterieren – Rückgabe der Datenwerte mit yield return

• Gibt den Datenwert zurück und unterbricht die Schleife

– Beendigung (wenn nötig) mit yield break;

Page 19: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Demo 4: Iteratoren

• Erweiterung des generischen Typs Stack mit der Methode GetEnumerable()– Hier: Generische Implementierung für den

jeweiligen Typ des Stacks

• Benutzung einer foreach-Schleife, um den gesamten Stack auszugeben

Page 20: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Generics im Framework

• Namensraum:– System.Collections.Generics

• Stack• List• Queue• Dictionary• SortedDictionary• …

Page 21: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Demo 5

• Benutzung der generischen Klassen im .NET Framework

• Verwenden des Typs List– Hinzufügen von Elementen– Suchen von Elementen– Löschen von Elementen– Sortieren

Page 22: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Und noch ein Grund…

• …für generische Typen• Mit Collection-Klassen:

– Boxing und unboxing– Das kostet Zeit– Besonders bei Typen, die NICHT als

Referenz vorliegen• Z.B.: int, double,…

• Mit generischen Typen:– Deutliche Performance-Verbesserung– Kein boxing und unboxing erforderlich

Page 23: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Demo 6

• Benutzung der Stack-Klasse…– …als Collection– …als Generic

• 10.000.000 Elemente rein und raus• Messen der Zeiten

– Benutzung der genauen Stopuhr (Stopwatch-Klasse)

– Namensraum: System.Diagnostics

Page 24: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Generische Typen / Templates

• C++-Templates– Werden zur Übersetzungszeit expandiert– Zur Laufzeit können keine neuen

Spezialisierungen aufgebaut werden– Die CLR weiß nichts über die Templates– Ein generischer Typ kann nicht Typ-

Parameter eines Templates sein Compile-Time-Spezialisierung der

Templates

Page 25: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Generische Typen / Templates

• Generics– Werden zur Laufzeit vom JIT-Compiler

expandiert– Generische Typen können von allen .NET-

Sprachen benutzt werden, egal in welcher Sprache sie erstellt wurden

– In mehreren Assemblies möglich– Der Typ-Parameter darf nicht als

Basisklasse für den generischen Datentyp verwendet werden

Page 26: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Anonyme Methoden

• Event-Handler werden bisher immer über Delegates mit separaten Methoden aufgerufen

• Mit „anonymen Methoden“ kann der Code quasi „inline“ abgelegt werden– Es können Parameter übergeben werden– Man kann auf die Klassen-Variablen zugreifen

addButton.Click += delegate{ ... }//-----------------------------------------------------addButton.Click += delegate(object sender, EventArgs e){ ... }

Page 27: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Partielle Klassen

• Klassen können auf mehrere Dateien verteilt werden

• Der Entwickler kann den Code sinnvoll aufteilen– Wizard-erzeugter Code– Von Hand-erzeugter Code

• Schlüsselwort partial wird benutzt• Der Compiler fügt im Prinzip alle Dateien einer

Klasse mit dem Schüsselwort partial zusammen• Intellisense funktioniert trotzdem• Hinweis: partial kann auch benutzt werden,

wenn alles nur in einer Datei codiert ist (gibt keine Fehlermeldung)

Page 28: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Sonstige Erweiterungen in C#

• Nullable Types• Der ::-Operator• Statische Klassen• get- und set-Zugriff• Co- und Contravariance• Fixed Size Buffers• Friend Assemblies

Page 29: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Nullable Types

• „Nullable“ Typen können einen undefinierten Zustand (null) haben

• Syntax:– T? oder System.Nullable<T> – Zum Beispiel: int? iWert;

• Abfrage mit Property: HasValue• Property Value ergibt den Wert oder

eine InvalidOperationException (wenn null)

Page 30: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Der ::-Operator

• Definiert die Suche nach bestimmten Typenusing System;

class MyApp { public class System { } // Das gibt Probleme: 'System' const int Console = 7; // Und das auch: 'Console' const int myInt = 66;

static void Main() { Console.WriteLine(myInt); // Error System.Console.WriteLine(myInt); // Error global::System.Console.WriteLine(myInt); // OK } }

Page 31: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Statische Klassen

• Statische Klassen ist der sichere Weg, um Klassen zu definieren, die nicht instanzierbar sind– Statische Klassen können nur statische

Member enthalten– Statische Klassen können nicht instanziert

werden– Statische Klassen sind versiegelt (sealed)– Statische Klassen dürfen keinen Konstruktor

enthalten

Page 32: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Statische Klassen

• Beispiel:using System;

static class Test { public static double Convert(int iWert); // OK public static string CalcData(...); // OK public int DoSomething(...); // ERROR! }

// Zugriff:double d = Test.Convert(4);string strOut = Test.CalcData(...);

Test t = new Test(); // ERROR!

Page 33: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005get- und set-Zugriff

• set- und get können unterschiedliche Zugriffsrechte haben

• Beispiel:public string Name // public!!! { get { return name; } protected set // protected!!! { name = value; } }

Page 34: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005get- und set-Zugriff

• Geht nicht bei Interfaces• Es müssen beide Methoden (get und set) implementiert sein

• Das Zugriffsverhalten für den Accessor muss immer restriktiver sein, als beim Property selbst

• Wenn override benutzt wird, dann müssen die Zugriffsoperatoren zueinander passen

Page 35: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Co- und Contravariance

• Erlaubt bei delegates die Benutzung von abgeleiteten Klassen als return- bzw. Parameterwert– Typ kann die Klasse selbst oder eine

davon abgeleitete Klasse sein

• Man benötigt nicht so viele Delegate-Deklarationen

Page 36: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Co- und Contravariance

class Mammals { } class Dogs : Mammals { }

class Program { public delegate Mammals MyHandler();

public static Mammals MyFirstHandler() { return null; } public static Dogs MySecondHandler() { return null; }

static void Main(string[] args) { MyHandler handler_1 = new MyHandler(MyFirstHandler); // Covariance ermöglicht dieses delegate: MyHandler handler_2 = new MyHandler(MySecondHandler); } }

Page 37: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Fixed Size Buffers

• Fixed size buffers sind wichtig wenn alter (unmanaged) Code benutzt werden soll

• Beispiel:...unsafe // Ist erforderlich für fixed size buffers{ public struct MyArray { public fixed char pathName[128]; // 256 bytes private int reserved; // 4 bytes } // Tot.: 260 bytes}...

Page 38: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Friend Assemblies

• Alle NICHT-öffentlichen Typen in einem Assembly „A“ können von einem Assembly „B“ benutzt werden, wenn „A“ als „Friend“von „B“ deklariert ist

• Public Key Token muss bekannt sein• Beispiel:

[assembly:InternalsVisibleTo("AssemblyB", PublicKeyToken="32ab4ba45e0a69a1")]

Page 39: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Kompatibilität zu C# 1.0

• Die Neuerungen in C# 2.0 brechen nicht die Kompatibilität zur Version 1.0

• Alter Code sollte also ohne Änderungen übernommen werden können

• Die Neuerungen der Version 2.0 können nach und nach benutzt werden, um den existierenden Code zu vereinfachen– Man muss aber nicht sofort umstellen (z.B.

auf generische Typen)

Page 40: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Zusammenfassung

• Die Erweiterungen von C# sind wichtig

• Es sind Erweiterungen – keine Änderungen!

• Die Kompatibilität zum alten bleibt erhalten

• Die Neuerungen können „nach und nach“ eingesetzt werden

Page 41: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005

Questions and Answers ??

??

?

Page 42: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005

Mehr Informationen

• http://www.microsoft.com• http://www.microsoft.com/germany/

msdn/default.mspx• http://msdn.microsoft.com• http://www.gotdotnet.com• http://msdn.microsoft.com/vstudio• http://msdn.microsoft.com/visualc/

whidbey

Page 43: Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005

Microsoft Academic

Program

Student Technology Conference 2005Glossar

• Generischer Typ: Zur Laufzeit erzeugter Typ, passend zu den Daten, die er verwaltet

• Template: Zur Compilezeit erzeugter Typ, passend zu den Daten, die er verwaltet (nur mit C++ verfügbar)

• Iterator: Einfache Möglichkeit, um Daten in einer For-Each-Loop abzufragen

• Nullable Typ: Ein Typ, der sowohl null als auch der deklarierte Typ sein kann

• Statische Klassen: Klassen, die nur statische Member enthalten und nicht instanziiert werden können

• Delegates: Typsichere Zeiger auf Funktionen und Methoden