C# ist eine der am meisten genutzten Programmiersprachen, doch wie den Ein- oder Umstieg schaffen? Genau dabei hilft Ihnen dieses Buch. Nachdem Sie sich zunächst die notwendigen Grundlagen erarbeitet haben, lernen Sie auch alles Notwendige über LINQ, XML und ADO.NET. Anschließend werden Sie sicher durch das Schreiben Ihrer ersten eigenen .NET-Anwendung geleitet. Noch nicht genug? Kapitel zu fortgeschrittenen .NET-Techniken wie die dynamische Programmierung oder die Task Parallel Library runden das Buch ab.
Steffen Steinbrecher programmiert schon seit über 15 Jahren. Nach dem Studium sammelte er mehrjährige Erfahrung in der professionellen Softwareentwicklung im .NET-Umfeld. Er lebt in der Nähe von Kaiserslautern. In seiner Freizeit betreibt er einen Blog, auf dem er hauptsächlich über verschiedene .NET-Themen schreibt.
Ü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 gehts 29
Kapitel 1 Grundlagen und Einführung31
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 Tools53
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 Programmsteuerung127
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 Datumswerte161
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: Ausnahmebehandlung221
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 Dateisystem267
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 Streams287
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 Programmierung313
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 LINQ349
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.NET371
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ät413
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 Forms433
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 XAML451
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 WPF499
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 Beispiel517
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-Projekte563
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