Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005.

Ähnliche Präsentationen


Präsentation zum Thema: "Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005."—  Präsentation transkript:

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

2 Microsoft Academic Program Student Technology Conference 2005 C# 2.0 – Was gibts da Neues? Bernd Marquardt MVP, RD Software und Consulting berndm@go-sky.de

3 Microsoft Academic Program Student Technology Conference 2005 Agenda 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

4 Microsoft Academic Program Student Technology Conference 2005 Neuerungen 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

5 Microsoft Academic Program Student Technology Conference 2005 Generische 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

6 Microsoft Academic Program Student Technology Conference 2005 Einfü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-Collection Stack stack = new Stack(); stack.Push(3); int i = (int)stack.Pop();

7 Microsoft Academic Program Student Technology Conference 2005 Programmierung 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[] items; int count; public void Push(T item) {... } public T Pop() {... } }

8 Microsoft Academic Program Student Technology Conference 2005 Anwendung Wenn die generische Klasse Stack benutzt werden soll, dann wird ü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 stack = new Stack (); 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() {... } }

9 Microsoft Academic Program Student Technology Conference 2005 Anwendung Der konstruierte Typ Stack 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 wird Stack sts = new Stack (); Stack std = new Stack (); Stack stdt = new Stack ();

10 Microsoft Academic Program Student Technology Conference 2005 Demo 1 Programmierung einer Stack-Klasse als generischer Typ Push - und Pop -Methode implemetieren Einfache Variante mit festem Array ohne Prüfung der Indices Anwendung

11 Microsoft Academic Program Student Technology Conference 2005 Generische Klassen Generische Typ-Deklarationen können beliebig viele Typ-Parameter enthalten Beispiel: public class Directory { public void Add(K key, V value) {... } public V this[K key] {... } } //--------------------------------------------- Directory dict = new Directory (); dict.Add(Bernd, new Customer()); Customer c = dict[Peter];

12 Microsoft Academic Program Student Technology Conference 2005 Einschrä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 where K: IComparable {... }

13 Microsoft Academic Program Student Technology Conference 2005 Einschrä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

14 Microsoft Academic Program Student Technology Conference 2005 Demo 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

15 Microsoft Academic Program Student Technology Conference 2005 Demo 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 > vec = new Vector >();... // Benutzung wie ein C++-Array vec[1][3] = 3; int ii = vec[1][3];

16 Microsoft Academic Program Student Technology Conference 2005 Generische Methoden In Methodenaufrufen können generische Typen als Parameter verwendet werden Man nennt diese Methoden: generische Methoden Beispiel 1: Funktioniert nur mit Stack void PushMultiple(Stack stack, params int [] values) { foreach(int i in values) { stack.Push(i); } //------------------------------------------------------ Stack stack = new Stack (); PushMultiple(stack, 1, 2, 3, 4);

17 Microsoft Academic Program Student Technology Conference 2005 Generische Methoden Damit PushMultiple mit allen Typen funktioniert, muss eine generische Methode implementiert werden Beispiel 2: Funktioniert immer void PushMultiple (Stack stack, params T [] values) { foreach(T val in values) { stack.Push(val); } //------------------------------------------------------ Stack stack = new Stack (); PushMultiple (stack, 1, 2, 3, 4); // PushMultiple(stack, 1, 2, 3, 4);

18 Microsoft Academic Program Student Technology Conference 2005 Iteratoren 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;

19 Microsoft Academic Program Student Technology Conference 2005 Demo 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

20 Microsoft Academic Program Student Technology Conference 2005 Generics im Framework Namensraum: –System.Collections.Generics Stack List Queue Dictionary SortedDictionary …

21 Microsoft Academic Program Student Technology Conference 2005 Demo 5 Benutzung der generischen Klassen im.NET Framework Verwenden des Typs List –Hinzufügen von Elementen –Suchen von Elementen –Löschen von Elementen –Sortieren

22 Microsoft Academic Program Student Technology Conference 2005 Und 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

23 Microsoft Academic Program Student Technology Conference 2005 Demo 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

24 Microsoft Academic Program Student Technology Conference 2005 Generische 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

25 Microsoft Academic Program Student Technology Conference 2005 Generische 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

26 Microsoft Academic Program Student Technology Conference 2005 Anonyme 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) {... }

27 Microsoft Academic Program Student Technology Conference 2005 Partielle 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)

28 Microsoft Academic Program Student Technology Conference 2005 Sonstige Erweiterungen in C# Nullable Types Der ::-Operator Statische Klassen get- und set-Zugriff Co- und Contravariance Fixed Size Buffers Friend Assemblies

29 Microsoft Academic Program Student Technology Conference 2005 Nullable Types Nullable Typen können einen undefinierten Zustand ( null ) haben Syntax: –T? oder System.Nullable –Zum Beispiel: int? iWert; Abfrage mit Property: HasValue Property Value ergibt den Wert oder eine InvalidOperationException (wenn null )

30 Microsoft Academic Program Student Technology Conference 2005 Der ::-Operator Definiert die Suche nach bestimmten Typen using 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 }

31 Microsoft Academic Program Student Technology Conference 2005 Statische 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

32 Microsoft Academic Program Student Technology Conference 2005 Statische 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!

33 Microsoft Academic Program Student Technology Conference 2005 get- und set-Zugriff set - und get können unterschiedliche Zugriffsrechte haben Beispiel: public string Name // public!!! { get { return name; } protected set // protected!!! { name = value; }

34 Microsoft Academic Program Student Technology Conference 2005 get- 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

35 Microsoft Academic Program Student Technology Conference 2005 Co- 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

36 Microsoft Academic Program Student Technology Conference 2005 Co- 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); }

37 Microsoft Academic Program Student Technology Conference 2005 Fixed 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 }...

38 Microsoft Academic Program Student Technology Conference 2005 Friend Assemblies Alle NICHT-öffentlichen Typen in einem Assembly A können von einem Assembly B benutzt werden, wenn A als Friendvon B deklariert ist Public Key Token muss bekannt sein Beispiel: [assembly:InternalsVisibleTo("AssemblyB", PublicKeyToken="32ab4ba45e0a69a1")]

39 Microsoft Academic Program Student Technology Conference 2005 Kompatibilitä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)

40 Microsoft Academic Program Student Technology Conference 2005 Zusammenfassung 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

41 Microsoft Academic Program Student Technology Conference 2005 Questions and Answers ? ? ? ? ?

42 Microsoft Academic Program Student Technology Conference 2005 Mehr Informationen http://www.microsoft.com http://www.microsoft.com/germany/msdn/d efault.mspxhttp://www.microsoft.com/germany/msdn/d efault.mspx http://msdn.microsoft.com http://www.gotdotnet.com http://msdn.microsoft.com/vstudio http://msdn.microsoft.com/visualc/whidbey

43 Microsoft Academic Program Student Technology Conference 2005 Glossar 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


Herunterladen ppt "Microsoft Academic Program C# 2.0 Was gibts da Neues? Student Technology Conference 2005."

Ähnliche Präsentationen


Google-Anzeigen