Dirk Louis, Thorsten Kansy, Shinja Strasser Microsoft Visual C# 2012 – Das Entwicklerbuch Dirk Louis, Thorsten Kansy, Shinja Strasser Microsoft Visual C# 2012 – Das Entwicklerbuch 3 Dirk Louis, Thorsten Kansy, Shinja Strasser: Microsoft Visual C# 2012 – Das Entwicklerbuch Copyright © 2013 by O’Reilly Verlag GmbH & Co. KG Das in diesem Buch enthaltene Programmmaterial ist mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor, Übersetzer und der Verlag übernehmen folglich keine Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieses Programmmaterials oder Teilen davon entsteht. Die in diesem Buch erwähnten Software- und Hardwarebezeichnungen sind in den meisten Fällen auch eingetragene Marken und unterliegen als solche den gesetzlichen Bestimmungen. Der Verlag richtet sich im Wesentlichen nach den Schreibweisen der Hersteller. Das Werk, einschließlich aller Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Die in den Beispielen verwendeten Namen von Firmen, Organisationen, Produkten, Domänen, Personen, Orten, Ereignissen sowie E-Mail-Adressen und Logos sind frei erfunden, soweit nichts anderes angegeben ist. Jede Ähnlichkeit mit tatsächlichen Firmen, Organisationen, Produkten, Domänen, Personen, Orten, Ereignissen, E-Mail-Adressen und Logos ist rein zufällig. Kommentare und Fragen können Sie gerne an uns richten: Microsoft Press Deutschland Konrad-Zuse-Straße 1 85716 Unterschleißheim E-Mail: [email protected] 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 15 14 13 Druck-ISBN 978-3-86645-565-8, PDF-ISBN 978-3-84833-000-3 EPUB-ISBN 978-3-84830-025-9, MOBI-ISBN 978-3-84830-174-4 © 2013 O’Reilly Verlag GmbH & Co. KG Balthasarstraße 81, 50670 Köln Alle Rechte vorbehalten Korrektorat: Kristin Grauthoff, Lippstadt Fachlektorat: Uwe Thiemann, Möhnesee Satz: Silja Brands, ActiveDevelop, Lippstadt (www.ActiveDevelop.de) Layout: Gerhard Alfes, mediaService, Siegen (www.media-service.tv) Umschlaggestaltung: Hommer Design GmbH, Haar (www.HommerDesign.com) Gesamtherstellung: Kösel, Krugzell (www.KoeselBuch.de) Übersicht 1 2 3 4 5 6 7 8 9 Einleitung ......................................................................................................................................... 31 Teil A Einführung in .NET 4.5 und Visual C# 2012...................................................................... 35 Das .NET Framework.................................................................................................................... Visual Studio 2012 ........................................................................................................................ Die ersten Programme ................................................................................................................ Stilkonventionen ............................................................................................................................ 101 Teil B C#-Grundlagen ............................................................................................................................. 107 Anatomie eines C#-Programms ............................................................................................... Variablen, Daten und Typen ...................................................................................................... Operatoren und Ausdrücke ....................................................................................................... Ablaufsteuerung ............................................................................................................................ Arrays, Enumerationen und Strukturen ................................................................................. Teil C Objektorientierte Programmierung in C#......................................................................... 10 11 12 13 14 15 Klassen .............................................................................................................................................. Schnittstellen .................................................................................................................................. Vererbung, Polymorphie und Klassen-Design .................................................................... Indexer, Enumeratoren und Iteratoren .................................................................................. Operatorenüberladung ............................................................................................................... Ausnahmebehandlung ................................................................................................................ 37 49 91 109 139 165 189 209 235 237 283 297 343 359 369 6 Übersicht Teil D Fortgeschrittenes C# ................................................................................................................... 16 17 18 19 20 21 22 23 Werttypen und Verweistypen .................................................................................................... Namespaces, Gültigkeitsbereiche und Zugriffsschutz ...................................................... Delegaten und Ereignisse ........................................................................................................... Attribute ............................................................................................................................................ C#-Generika .................................................................................................................................... XML-basierte Dokumentierung ................................................................................................ Lambda-Ausdrücke ....................................................................................................................... Spracherweiterungen ................................................................................................................... Teil E Nützliche .NET-Klassen .............................................................................................................. 24 25 26 27 Strings und reguläre Ausdrücke ............................................................................................... Streams, Dateien, XML und Serialisierung ............................................................................ Auflistungen .................................................................................................................................... Datum, Mathematik und die Systemumgebung ................................................................. Teil F Windows Presentation Foundation ...................................................................................... 28 29 30 31 32 Einführung in WPF ........................................................................................................................ WPF-Fenster, -Seiten und -Steuerelemente.......................................................................... Drag & Drop, Drucken und andere weiterführende Techniken...................................... Grafik ................................................................................................................................................. XAML ................................................................................................................................................. Teil G Windows Store-Apps .................................................................................................................. 33 34 35 36 Einführung in Windows Store-Apps ........................................................................................ Layouts und Steuerelemente ..................................................................................................... Spezielle Techniken ....................................................................................................................... Von der Idee zum Windows Store............................................................................................ 387 389 423 435 453 461 489 507 517 535 537 575 619 641 663 665 701 745 769 785 801 803 829 867 903 7 Übersicht Teil H Multithreading.............................................................................................................................. 37 38 39 Prozesse ........................................................................................................................................... Thread-Programmierung ........................................................................................................... Parallele Programmierung ......................................................................................................... Teil I Datenbanken ................................................................................................................................. 40 41 42 43 B C 923 929 949 983 ADO.NET .......................................................................................................................................... CLR-Programmierung mit dem SQL Server ......................................................................... 1017 Teil J WCF und LINQ ............................................................................................................................... 1031 Einführung in die WCF ................................................................................................................ LINQ .................................................................................................................................................. Teil K Anhänge .......................................................................................................................................... A 921 985 1033 1057 1095 Schlüsselwörter .............................................................................................................................. C#-Referenz .................................................................................................................................... Debuggen mit Visual Studio ..................................................................................................... 1097 Stichwortverzeichnis..................................................................................................................... 1137 Die Autoren ..................................................................................................................................... 1171 1099 1115 Inhaltsverzeichnis Einleitung .................................................................................................................................................. 31 Teil A Einführung in .NET 4.5 und Visual C# 2012...................................................................... 35 1 Das .NET Framework.................................................................................................................... Historie .................................................................................................................................................. Bausteine des .NET Frameworks........................................................................................................ Common Language Infrastructure ............................................................................................. Common Language Runtime ...................................................................................................... Common Intermediate Language ............................................................................................... Just-In-Time-Compiler ................................................................................................................ Assemblys .............................................................................................................................................. Ausführungsmodell für Assemblys............................................................................................. .NET Framework und die Windows Runtime.................................................................................. 2 Visual Studio 2012 ........................................................................................................................ Visual Studio ......................................................................................................................................... Geschichte ...................................................................................................................................... Visual Studio 2012, .NET Framework 4.5 und C#.................................................................... Arbeiten in der Entwicklungsumgebung ................................................................................... Die Projektverwaltung ......................................................................................................................... Übersicht ........................................................................................................................................ Projektmappen .............................................................................................................................. Startprojekte, Verweise und Projektabhängigkeiten ................................................................ Eigene Projektvorlagen................................................................................................................. Der Code-Editor................................................................................................................................... Kleine Annehmlichkeiten ............................................................................................................ IntelliSense ..................................................................................................................................... using-Smarttag............................................................................................................................... Umschließung................................................................................................................................ Codeausschnitte............................................................................................................................. Umgestaltung................................................................................................................................. 37 39 40 40 40 41 42 43 45 47 49 50 50 51 51 58 59 59 64 67 68 68 70 72 72 73 74 10 Inhaltsverzeichnis 3 Erstellung .............................................................................................................................................. MSBuild.......................................................................................................................................... Build-Konfigurationen................................................................................................................. Konfiguration ....................................................................................................................................... Umgebungseinstellungen ............................................................................................................ Tools/Optionen............................................................................................................................. Externe Tools einrichten.............................................................................................................. Fensterverwaltung ............................................................................................................................... Die Andock-Hilfe.......................................................................................................................... Die Pinnnadel................................................................................................................................ Der IDE-Navigator ....................................................................................................................... Navigation............................................................................................................................................. Suchen ............................................................................................................................................ Zur Definition wechseln .............................................................................................................. Klassenansicht und Objektkatalog ............................................................................................. Aufrufhierarchie............................................................................................................................ Hilfe ....................................................................................................................................................... Übersicht........................................................................................................................................ Lokal oder Online ......................................................................................................................... Die Online-Hilfe ........................................................................................................................... Die lokale Hilfe.............................................................................................................................. 76 77 77 78 78 79 80 81 81 82 83 83 83 84 85 85 86 86 86 87 88 Die ersten Programme................................................................................................................. 91 92 95 Konsolenanwendungen....................................................................................................................... GUI-Anwendungen............................................................................................................................. 4 5 Stilkonventionen............................................................................................................................. Bezeichner............................................................................................................................................. Konventionen ....................................................................................................................................... Blöcke .................................................................................................................................................... 101 102 103 105 Teil B C#-Grundlagen .............................................................................................................................. 107 Anatomie eines C#-Programms ............................................................................................... Programmaufbau ................................................................................................................................. Klassen............................................................................................................................................ Eintrittspunkt Main()................................................................................................................... using-Direktive und Framework-Klassen ........................................................................................ Ein- und Ausgabe ......................................................................................................................... Kommentare.................................................................................................................................. 109 110 111 112 114 114 116 Inhaltsverzeichnis 6 11 Dateien und Assemblys........................................................................................................................ Klassen und Dateien ..................................................................................................................... Dateien und Assemblys ................................................................................................................ Imperative Programmierung in C#.................................................................................................... Daten und Datentypen ................................................................................................................. Literale und Variablen .................................................................................................................. Operatoren und Ausdrücke ......................................................................................................... Anweisungen.................................................................................................................................. Funktionen (Methoden)............................................................................................................... Objektorientierte Programmierung in C# ........................................................................................ Wie sind OOP-Objekte beschaffen? ........................................................................................... Objekte und Klassen ..................................................................................................................... Die Klasse als Zentrum der objektorientierten Programmierung.......................................... Konzepte, die auf der Klasse aufbauen....................................................................................... Die Klasse als Funktionensammlung ......................................................................................... 117 117 118 120 120 120 121 121 123 124 125 126 129 133 138 Variablen, Daten und Typen ...................................................................................................... 139 140 140 140 141 144 144 147 147 148 149 150 150 151 152 153 155 157 158 158 160 161 161 162 163 Das C#-Datenmodell ........................................................................................................................... Datenrepräsentation ..................................................................................................................... Typisierung .................................................................................................................................... Wert- und Verweistypen.............................................................................................................. Erweiterbarkeit .............................................................................................................................. Literale ................................................................................................................................................... Variablen................................................................................................................................................ Definition ....................................................................................................................................... Initialisierung................................................................................................................................. Eindeutige Zuweisung .................................................................................................................. Gültigkeitsbereiche........................................................................................................................ Konstanten ............................................................................................................................................ Typen: Primitive Typen ....................................................................................................................... Der bool-Typ.................................................................................................................................. Ganzzahlige Typen........................................................................................................................ Gleitkommatypen.......................................................................................................................... Zeichen............................................................................................................................................ Der decimal-Typ............................................................................................................................ Typen: Definierbare Typen ................................................................................................................. Typen: Strings ....................................................................................................................................... Typumwandlung und Boxing ............................................................................................................. Implizite Typumwandlungen ...................................................................................................... Explizite Typumwandlungen....................................................................................................... Boxing und Unboxing .................................................................................................................. 12 Inhaltsverzeichnis 7 Operatoren und Ausdrücke ........................................................................................................ Operatoren und Ausdrücke................................................................................................................ Klassifizierung nach Operanden................................................................................................. Ausdrücke ...................................................................................................................................... Auswertungsreihenfolge ..................................................................................................................... Vorrang der Operatoren.............................................................................................................. Assoziativität der Operatoren ..................................................................................................... Operanden ..................................................................................................................................... Klammerung.................................................................................................................................. Nebeneffekte und andere Fallstricke!................................................................................................ Die arithmetischen Operatoren ......................................................................................................... Division und Modulo ................................................................................................................... Inkrement und Dekrement ......................................................................................................... Die Zuweisungsoperatoren................................................................................................................. Die relationalen Operatoren............................................................................................................... Die logischen Operatoren................................................................................................................... Die Bit-Operatoren.............................................................................................................................. Die Operatoren für die Typidentifizierung und -umwandlung .................................................... Typidentifizierung ........................................................................................................................ Typumwandlung........................................................................................................................... Sonstige Operatoren ............................................................................................................................ Datenzugriff................................................................................................................................... checked und unchecked...................................................................................................................... Der new-Operator ........................................................................................................................ Der Bedingungsoperator ?:.......................................................................................................... Der ??-Operator ............................................................................................................................ Operatoren für nicht gesicherten Code ..................................................................................... 8 Ablaufsteuerung ............................................................................................................................ Verzweigungen ..................................................................................................................................... Die einfache if-Anweisung .......................................................................................................... Die if...else-Verzweigung ............................................................................................................. if...else-Ketten und -Verschachtelungen.................................................................................... Die switch-Verzweigung.............................................................................................................. Schleifen ................................................................................................................................................ Die while-Schleife ......................................................................................................................... Die do...while-Schleife.................................................................................................................. Die for-Schleife.............................................................................................................................. Die foreach-Schleife für Arrays und Auflistungen................................................................... Sprunganweisungen............................................................................................................................. Die continue-Anweisung............................................................................................................. Die break-Anweisung................................................................................................................... Die goto-Anweisung..................................................................................................................... 165 166 166 167 167 168 169 170 170 170 173 173 174 175 176 177 180 183 183 185 186 186 187 187 187 188 188 189 190 190 192 193 195 198 199 201 203 204 205 206 206 207 Inhaltsverzeichnis 9 10 Arrays, Enumerationen und Strukturen ................................................................................. 13 Arrays..................................................................................................................................................... Definition und Erzeugung ........................................................................................................... Initialisierungslisten...................................................................................................................... System.Array .................................................................................................................................. Mehrdimensionale Arrays ........................................................................................................... Arrays von Arrays ......................................................................................................................... Enumerationen ..................................................................................................................................... Definition ....................................................................................................................................... Verwendung................................................................................................................................... Enumerationen und switch.......................................................................................................... Die Klasse System.Enum .............................................................................................................. Strukturen.............................................................................................................................................. Definition ....................................................................................................................................... Verwendung................................................................................................................................... Unterschiede zwischen Strukturen und Klassen....................................................................... 209 210 210 213 213 222 226 228 228 229 230 230 232 232 233 234 Teil C Objektorientierte Programmierung in C#......................................................................... 235 Klassen .............................................................................................................................................. Die Klassendefinition .......................................................................................................................... Zugriff auf Klasse steuern............................................................................................................. Zugriff auf Member steuern......................................................................................................... Spezielle Klassen ............................................................................................................................ Partielle Klassen............................................................................................................................. Konstanten ............................................................................................................................................ Felder...................................................................................................................................................... Definition ....................................................................................................................................... Instanzfelder................................................................................................................................... Statische Felder .............................................................................................................................. Methoden .............................................................................................................................................. Allgemeines .................................................................................................................................... Instanzmethoden und this ........................................................................................................... Statische Methoden....................................................................................................................... Datenaustausch.............................................................................................................................. Rekursion........................................................................................................................................ Überladung..................................................................................................................................... Eigenschaften ........................................................................................................................................ Konstruktoren....................................................................................................................................... Klassen ohne selbst definierten Konstruktor ............................................................................ Der Standardkonstruktor............................................................................................................. 237 238 239 239 241 242 243 244 244 245 246 250 250 253 255 256 264 265 268 272 274 274 14 Inhaltsverzeichnis 11 Überladene Konstruktoren.......................................................................................................... Statische Konstruktoren............................................................................................................... Destruktoren......................................................................................................................................... Aufruf ............................................................................................................................................. Eigener Destruktor ....................................................................................................................... Verschachtelte Typdefinitionen ......................................................................................................... 274 275 277 277 278 280 Schnittstellen ................................................................................................................................... 283 284 285 286 287 288 288 289 290 292 294 Vertragsbasierte Programmierung .................................................................................................... Modell 1: Schnittstellen-gestützte Methoden ........................................................................... Modell 2: Schnittstellen als Labels für Klassen ......................................................................... Schnittstellen definieren ..................................................................................................................... Schnittstellen-Member................................................................................................................. Schnittstellenvererbung ............................................................................................................... Schnittstellen implementieren ........................................................................................................... Die Dokumentation ist wichtig (IComparable-Beispiel) ........................................................ Schnittstellen-Member verbergen .............................................................................................. Namenskonflikte in Schnittstellen lösen .......................................................................................... 12 Vererbung, Polymorphie und Klassen-Design ..................................................................... Vererbung.............................................................................................................................................. Das Prinzip der Vererbung.......................................................................................................... Geerbte Member ........................................................................................................................... Die oberste Basisklasse Object .................................................................................................... Vererbung über Assembly- und Sprachgrenzen hinweg ........................................................ Polymorphie ......................................................................................................................................... Grundprinzip und Implementierung......................................................................................... Dynamische und statische Bindung........................................................................................... Generische Programmierung...................................................................................................... Typidentifizierung zur Laufzeit .................................................................................................. Abstrakte Klassen.......................................................................................................................... Der Klassen-Designer ......................................................................................................................... Klassendiagramme erzeugen....................................................................................................... Klassendiagramme bearbeiten .................................................................................................... Projekt-Dokumentationen erstellen........................................................................................... Analyse-Spezifikationen umsetzen............................................................................................. Projekte pflegen............................................................................................................................. 13 Indexer, Enumeratoren und Iteratoren ................................................................................... Indexer................................................................................................................................................... Syntax ............................................................................................................................................. Beispiel............................................................................................................................................ 297 298 298 302 312 313 317 317 320 327 332 334 336 336 337 340 340 341 343 344 344 345