Table of Contents
Über den Autor 11 
Einleitung 23
 Über dieses Buch 23
 Wie dieses Buch aufgebaut ist 24
 Symbole, die in diesem Buch verwendet werden 26
 Wie es weiter geht 27
 Teil I: Los geht’s 29
 Kapitel 1 Grundlagen und Einführung 31
 Grundlagen der Programmierung 31
 Warum programmieren wir eigentlich? 32
 Programmiersprachen 33
 .NET-Plattformarchitektur 37
 Wie funktioniert eine .NET-Sprache? 39
 Das .NET-Framework 42
 Die Programmiersprache C# 44
 Das Prinzip der objektorientierten Programmierung 44
 Objekte und ihre Klassen 44
 Abstraktion 47
 Kapselung 48
 Vererbung 48
 Polymorphie 49
 Kapitel 2 Entwicklungswerkzeuge und Tools 53
 Ein Programm erstellen 53
 Microsoft Visual Studio 2019 Community Edition 59
 Ihr erstes eigenes Projekt 60
 Der Marktplatz für fertige Lösungen: NuGet 71
 Kapitel 3 Das ABC der Sprache C# 75
 Bezeichner 75
 Namenskonventionen 76
 Schlüsselwörter 78
 Anweisungen 79
 Kommentare 79
 Datentypen, Variablen und Konstanten 82
 Deklaration von Variablen 84
 Das Schlüsselwort var oder Typinferenz 86
 Konstanten deklarieren 88
 Zugriff und Verwendung von Variablen 89
 Wert- und Referenztypen 90
 Weitere Datentypen 97
 Gültigkeitsbereiche von Variablen 100
 Konvertieren von Datentypen 101
 Was ist eine Methode? 110
 Übergeben von Parametern 112
 Methoden mit Rückgabewert 115
 Methoden ohne Rückgabewert 117
 Namensräume 119
 Wo finde ich was? 121
 Verwendung von Namensräumen 122
 Alias für einen Namensraum 124
 Kapitel 4 Operatoren und Programmsteuerung 127
 Operatoren 127
 Rechenoperatoren 128
 Zuweisungsoperatoren 132
 Logische Operatoren 133
 Den Programmablauf steuern: Verzweigungen und Kontrollstrukturen 136
 if-Anweisung 137
 switch-Anweisung und -Ausdruck 144
 Vorgänge wiederholen: Schleifen 148
 for-Schleife 149
 while-Schleife 151
 do-while-Schleife 155
 foreach-Schleife 157
 Sie haben es sich anders überlegt? 158
 Kapitel 5 Zeichenfolgen, Arrays und Datumswerte 161
 Zeichen und Zeichenfolgen 161
 String-Variablen deklarieren 162
 String-Interpolation und kombinierte Formatierung 164
 Zeichenfolgen analysieren 166
 Zeichenfolgen manipulieren 168
 Sonderzeichen in Zeichenfolgen 170
 StringBuilder: Wenn Geschwindigkeit eine Rolle spielt 172
 Formatierung von Zeichenfolgen 173
 Arrays 178
 Arrays deklarieren 179
 Arrays erzeugen 179
 Arrays initialisieren 180
 Zugriff auf Array-Elemente 182
 Eigenschaften und Methoden von Arrays 185
 Datums- und Zeitberechnungen 188
 Die DateTime-Struktur 188
 Die TimeSpan-Struktur 192
 Praxisbeispiele 193
 Kapitel 6 Objektorientierte Programmierung mit C# 197
 Klassen, Eigenschaften und Methoden 197
 Klassen 198
 Eigenschaften 198
 Objekte 204
 Methoden und Konstruktoren 205
 Statische Klassen 207
 Vererbung 210
 Ober- und Unterklassen 210
 Methoden überschreiben 212
 Der Zugriff auf die Member der Basisklasse mit base 213
 Abstrakte Klassen 214
 Interfaces 216
 Kapitel 7 Fehler passieren, macht aber nichts: Ausnahmebehandlung 221
 Mit Ausnahmen umgehen 222
 Wie man einen Fehler »fängt«! 225
 Der Parameter einer catch-Klausel 226
 Ausnahmetypen 228
 Fehler auslösen 231
 Eigene Fehlerklassen erstellen 232
 Kapitel 8 Weitere Sprachfeatures 235
 Delegates 235
 Anonyme Methoden 239
 Lambda-Ausdrücke 240
 Ereignisse – was geht ab? 242
 Ereignisse registrieren und behandeln 243
 Ereignisse veröffentlichen 244
 Generics – generische Datentypen 247
 Generische Klassen, Methoden und Eigenschaften 248
 Generische Auflistungen 251
 Nette Helfer: Attribute 259
 Sie wollen mehr? Erweiterungsmethoden 261
 Teil II: Weitere Sprachfeatures von C# 265
 Kapitel 9 Zugriffe auf das Dateisystem 267
 Klassen für den Zugriff auf das Dateisystem 267
 Arbeiten mit Verzeichnissen 269
 Arbeiten mit Dateien 276
 Nicht bei der Ausnahmebehandlung sparen! 280
 Praxisbeispiele 282
 Verzeichnisgröße ermitteln 282
 Kopieren von Verzeichnissen 284
 Kapitel 10 Dateizugriff und Streams 287
 Arbeiten mit Dateien 287
 Text-Dateien erstellen, lesen und ändern 288
 Arbeiten mit Streams 291
 Lesen und Schreiben 293
 Datei mit einem Stream schreiben 296
 Komprimieren von Dateien mit .NET-Klassen 297
 Neues ZIP-Archiv erzeugen 298
 Alle Dateien eines ZIP-Archivs extrahieren 300
 Objekte serialisieren 301
 Im Binärformat serialisieren 302
 XML 306
 JSON-Dateien 308
 Kapitel 11 Asynchrone und parallele Programmierung 313
 Grundlagen und Begrifflichkeiten 314
 Asynchrone Programmiermuster 318
 Programmieren mit Threads 318
 Die TPL – Task Parallel Library 331
 Ein gutes Team: async und await 342
 Kapitel 12 Daten abfragenmit LINQ 349
 LINQ-Grundlagen 349
 Die Basis für LINQ-Abfragen 351
 Abfragen mit LINQ 353
 Die alternativen Schreibweisen von LINQ-Abfragen 358
 Die wichtigsten Abfrageoperatoren 359
 Ergebnis filtern (where-Operator) 359
 Ergebnis sortieren (orderby-Operator) 362
 Ergebnis partitionieren (skip- und take-Operator) 363
 Doppelte Einträge löschen (distinct-Operator) 365
 Aggregat-Operatoren 366
 Praxisbeispiele 367
 CSV-Datei mit LINQ einlesen 367
 Kapitel 13 Grundlagen von ADO.NET 371
 Vorbereitungen 372
 Installation der Datenbank 372
 Beispieldaten importieren 374
 Datenbankzugriffe mit ADO.NET 377
 Verbindung zur Datenbank herstellen 378
 Datensätze abfragen 381
 Datensätze einfügen 386
 Datensätze aktualisieren 388
 Datensätze löschen 390
 Das DataSet und der DataAdapter 392
 Der DataAdapter –die Brücke zu den Daten 393
 Asynchrone Datenbankzugriffe 404
 Teil III: Eine eigene C#-Anwendung schreiben 411
 Kapitel 14 Fehlersuche und Softwarequalität 413
 Welche Fehlerarten gibt es überhaupt? 414
 Fehler zur Compiletime (Übersetzungszeit) 414
 Fehler zur Runtime (Laufzeit) – Bugs 414
 Der Debugger 415
 Ein paar Grundlagen 415
 Überprüfen von Code und Variablen zur Laufzeit 416
 Überprüfen von Zeichenfolgen in der Schnellansicht 421
 Anzeigen von Rückgabewerten einer Funktion 422
 Attributed Debugging 423
 Dem Fehler auf die Schliche kommen – der Stacktrace 425
 Codequalität verbessern 427
 Suchen Sie nach roten und grünen Schlangenlinien 428
 Achten Sie auf die Glühbirne 430
 Kapitel 15 Benutzeroberfläche mit Windows Forms 433
 Grundgerüst einer Windows-Forms-Anwendung 434
 Die Datei Program.cs 435
 Die Dateien Form1.cs und Form1.Designer.cs 436
 Benutzeroberfläche erstellen 439
 Steuerelemente verwenden 440
 Ereignisse von Steuerelementen 443
 Windows-Forms-Anwendung: Ja oder Nein? 449
 Kapitel 16 Moderne Oberflächen mit WPF und XAML 451
 Meine erste WPF-Anwendung 452
 XAML –Extended Application Markup Language 454
 Logischer und visueller Elementbaum in WPF 457
 Layout in WPF 458
 Ereignisse in WPF 470
 Commands 473
 Ressourcen in WPF 476
 Ressourcen in separate Datei auslagern 479
 Das gewisse Etwas: Styles 481
 Was ist ein Style? 482
 Templates 487
 Databinding –die Benutzeroberfläche mit Daten versorgen 491
 Die Richtung des Bindings: Wie Daten aktualisiert werden 493
 Der UpdateSourceTrigger: Wann Daten aktualisiert werden 494
 Teil IV: Fortgeschrittene Techniken in C# und WPF 497
 Kapitel 17 Fortgeschrittene Techniken rund um die WPF 499
 Das Beispielprogramm 499
 Das MVVM-Entwurfsmuster 501
 Das Model 503
 Das ViewModel 503
 Datenbeschaffung 510
 Eigene Commands implementieren 511
 Kapitel 18 Modulare Anwendung auf Basis von C# und WPF – ein Beispiel 517
 Die Beispielanwendung 518
 Vorbereitungen und Erstellung der Solution 520
 Styling der Anwendung 524
 Das Dependency-Injection-Entwurfsmuster 527
 Dynamische Oberflächen mit Prism-Regionen 529
 Erstellung eines UserControls 533
 Registrierung von Views 535
 Erstellung eines Prism-Moduls 536
 Anlegen des Projekts für das Modul 537
 Erstellen der Benutzeroberfläche 538
 Registrierung des Moduls 544
 Austausch- und wiederverwendbare Komponenten 545
 Registrierung und Verwendung der Klasse 547
 Fazit –Was haben Sie jetzt gewonnen? 549
 Teil V: Der Top-Ten-Teil 551
 Kapitel 19 Zehn Dinge in C#, die Sie wirklich lernen und verwenden sollten! 553
 Initialisierer für Objekte und Collections 553
 Automatisch implementierte Eigenschaften initialisieren 554
 null-coalescing Operator ?? 555
 String-Interpolation für dynamische Zeichenfolgen 555
 Null-conditional Operator 556
 nameof()-Ausdruck 557
 is- und as-Operatoren 558
 Zeichenfolgen mit String.IsNullOrEmpty() überprüfen 559
 break- und continue-Anweisung 560
 TryParse für die Umwandlung von Zeichenketten 561
 Kapitel 20 Zehn nützliche Open-Source-Projekte 563
 MahApps.Metro: Verpassen Sie Ihrer Anwendung den Metro-Style 563
 Modern UI for WPF (MUI) 563
 MaterialDesignInXamlToolkit 564
 Extended WPF Toolkit™ 564
 WPFLocalizationExtension 564
 ResXManager 565
 Prism 565
 Sammlung von Erweiterungsmethoden 565
 Modern UI Icons 566
 Material Design Icons 566
 Stichwortverzeichnis 567