Visual C# 2017

Grundlagen, Profiwissen und Rezepte
Buch | Hardcover
952 Seiten
2018
Carl Hanser (Verlag)
978-3-446-45359-3 (ISBN)
50,00 inkl. MwSt
  • Titel ist leider vergriffen;
    keine Neuauflage
  • Artikel merken
Dieser Klassiker der C#-/.NET-Programmierung bietet Ihnen Know-how und zahlreiche Rezepte, mit denen Sie häufig auftretende Probleme meistern.

Einsteiger erhalten ein umfangreiches Tutorial zu den Grundlagen der C#-Programmierung mit Visual Studio 2017, dem Profi liefert es fortgeschrittene Programmiertechniken zu allen wesentlichen Einsatzgebieten der Windows-Programmierung. Zum sofortigen Ausprobieren finden Sie am Ende eines jeden Kapitels hochwertige Lösungen für nahezu jedes Problem.

Mit diesem Buch haben Sie den idealen Begleiter für Ihre tägliche Arbeit und zugleich – dank der erfrischenden und unterhaltsamen Sprache – eine spannende Lektüre, die Lust macht, auch Projekte in der Freizeit umzusetzen.

Das Buch gliedert sich in einen Grundlagenteil zur Programmierung mit Visual Studio 2017 und C# 7.0 und einen Technologieteil zu fortgeschrittenen Themen.

Im Internet finden Sie darüber hinaus zum Download Beispiele und Bonuskapitel zu Windows Presentation Foundation (WPF) und Windows Forms-Anwendungen.

Extra: eBook inside
Systemvoraussetzungen für eBook inside: Internet-Verbindung und Adobe-Reader oder ebook-Reader bzw. Adobe Digital Editions.

Walter Doberenz und Thomas Gewinnus haben sich als Entwickler, Dozenten und Fachbuchautoren für Microsoft- und Borland-Entwicklerwerkzeuge einen starken Namen gemacht, ihre Fachbücher sind seit Jahren etabliert.

Jürgen Kotz ist als Entwickler und Dozent seit 25 Jahren tätig.NET und C# setzt er seit der Einführung von.NET im Jahre 2002 ein.

Walter Saumweber hat langjährige Erfahrung als Entwickler und Dozent. Er veröffentlicht regelmäßig Artikel in IT-Fachzeitschriften und ist Autor von zahlreichen Computerfachbüchern.

Inhalt 7
Vorwort 23
TEIL I: Grundlagen 27
1 Einstieg in Visual Studio 2017 29
1.1 Die Installation von Visual Studio 2017 29
1.1.1 Überblick über die Produktpalette 29
1.1.2 Anforderungen an Hard- und Software 30
1.2 Unser allererstes C#-Programm 31
1.2.1 Vorbereitungen 31
1.2.2 Quellcode schreiben 33
1.2.3 Programm kompilieren und testen 33
1.2.4 Einige Erläuterungen zum Quellcode 34
1.2.5 Konsolenanwendungen sind out 35
1.3 Die Windows-Philosophie 36
1.3.1 Mensch-Rechner-Dialog 36
1.3.2 Objekt- und ereignisorientierte Programmierung 36
1.3.3 Programmieren mit Visual Studio 2017 38
1.4 Die Entwicklungsumgebung Visual Studio 2017 39
1.4.1 Neues Projekt 39
1.4.2 Die wichtigsten Fenster 40
1.5 Microsofts .NET-Technologie 44
1.5.1 Zur Geschichte von .NET 44
1.5.2 .NET-Features und Begriffe 46
1.6 Praxisbeispiele 54
1.6.1 Unsere erste Windows-Forms-Anwendung 54
1.6.2 Umrechnung Euro-Dollar 58
2 Grundlagen der Sprache C# 67
2.1 Grundbegriffe 67
2.1.1 Anweisungen 67
2.1.2 Bezeichner 68
2.1.3 Schlüsselwörter 69
2.1.4 Kommentare 70
2.2 Datentypen, Variablen und Konstanten 71
2.2.1 Fundamentale Typen 71
2.2.2 Wertetypen versus Verweistypen 72
2.2.3 Benennung von Variablen 73
2.2.4 Deklaration von Variablen 73
2.2.5 Typsuffixe 75
2.2.6 Zeichen und Zeichenketten 75
2.2.7 object-Datentyp 78
2.2.8 Konstanten deklarieren 79
2.2.9 Nullable Types 79
2.2.10 Typinferenz 80
2.2.11 Gültigkeitsbereiche und Sichtbarkeit 81
2.3 Konvertieren von Datentypen 82
2.3.1 Implizite und explizite Konvertierung 82
2.3.2 Welcher Datentyp passt zu welchem? 84
2.3.3 Konvertieren von string 84
2.3.4 Die Convert-Klasse 87
2.3.5 Die Parse-Methode 87
2.3.6 Boxing und Unboxing 88
2.4 Operatoren 89
2.4.1 Arithmetische Operatoren 90
2.4.2 Zuweisungsoperatoren 92
2.4.3 Logische Operatoren 93
2.4.4 Rangfolge der Operatoren 95
2.5 Kontrollstrukturen 97
2.5.1 Verzweigungsbefehle 97
2.5.2 Schleifenanweisungen 100
2.6 Benutzerdefinierte Datentypen 103
2.6.1 Enumerationen 103
2.6.2 Strukturen 105
2.7 Nutzerdefinierte Methoden 107
2.7.1 Methoden mit Rückgabewert 108
2.7.2 Methoden ohne Rückgabewert 109
2.7.3 Parameterübergabe mit ref 110
2.7.4 Parameterübergabe mit out 111
2.7.5 Methodenüberladung 112
2.7.6 Optionale Parameter 113
2.7.7 Benannte Parameter 115
2.8 Praxisbeispiele 116
2.8.1 Vom PAP zur Konsolenanwendung 116
2.8.2 Ein Konsolen- in ein Windows-Programm verwandeln 118
2.8.3 Schleifenanweisungen verstehen 120
2.8.4 Benutzerdefinierte Methoden überladen 122
2.8.5 Anwendungen von Visual Basic nach C# portieren 125
3 OOP-Konzepte 133
3.1 Kleine Einführung in die OOP 133
3.1.1 Historische Entwicklung 134
3.1.2 Grundbegriffe der OOP 135
3.1.3 Sichtbarkeit von Klassen und ihren Mitgliedern 137
3.1.4 Allgemeiner Aufbau einer Klasse 138
3.1.5 Das Erzeugen eines Objekts 140
3.1.6 Einführungsbeispiel 143
3.2 Eigenschaften 147
3.2.1 Eigenschaften mit Zugriffsmethoden kapseln 147
3.2.2 Berechnete Eigenschaften 149
3.2.3 Lese-/Schreibschutz 151
3.2.4 Property-Accessoren 152
3.2.5 Statische Felder/Eigenschaften 152
3.2.6 Einfache Eigenschaften automatisch implementieren 155
3.3 Methoden 156
3.3.1 Öffentliche und private Methoden 156
3.3.2 Überladene Methoden 157
3.3.3 Statische Methoden 158
3.4 Ereignisse 160
3.4.1 Ereignis hinzufügen 160
3.4.2 Ereignis verwenden 163
3.5 Arbeiten mit Konstruktor und Destruktor 166
3.5.1 Konstruktor und Objektinitialisierer 167
3.5.2 Destruktor und Garbage Collector 170
3.5.3 Mit using den Lebenszyklus des Objekts kapseln 172
3.5.4 Verzögerte Initialisierung 173
3.6 Vererbung und Polymorphie 174
3.6.1 Klassendiagramm 174
3.6.2 Method-Overriding 175
3.6.3 Klassen implementieren 175
3.6.4 Implementieren der Objekte 179
3.6.5 Ausblenden von Mitgliedern durch Vererbung 180
3.6.6 Allgemeine Hinweise und Regeln zur Vererbung 182
3.6.7 Polymorphes Verhalten 183
3.6.8 Die Rolle von System.Object 186
3.7 Spezielle Klassen 187
3.7.1 Abstrakte Klassen 187
3.7.2 Versiegelte Klassen 189
3.7.3 Partielle Klassen 189
3.7.4 Statische Klassen 191
3.8 Schnittstellen (Interfaces) 191
3.8.1 Definition einer Schnittstelle 192
3.8.2 Implementieren einer Schnittstelle 192
3.8.3 Abfragen, ob Schnittstelle vorhanden ist 193
3.8.4 Mehrere Schnittstellen implementieren 194
3.8.5 Schnittstellenprogrammierung ist ein weites Feld ... 194
3.9 Praxisbeispiele 195
3.9.1 Eigenschaften sinnvoll kapseln 195
3.9.2 Eine statische Klasse anwenden 198
3.9.3 Vom fetten zum schlanken Client 200
3.9.4 Schnittstellenvererbung verstehen 210
3.9.5 Rechner für komplexe Zahlen 215
3.9.6 Sortieren mit IComparable/IComparer 224
3.9.7 Einen Objektbaum in generischen Listen abspeichern 228
3.9.8 OOP beim Kartenspiel erlernen 234
3.9.9 Eine Klasse zur Matrizenrechnung entwickeln 239
4 Arrays, Strings, Funktionen 245
4.1 Datenfelder (Arrays) 245
4.1.1 Array deklarieren 246
4.1.2 Array instanziieren 246
4.1.3 Array initialisieren 247
4.1.4 Zugriff auf Array-Elemente 248
4.1.5 Zugriff mittels Schleife 249
4.1.6 Mehrdimensionale Arrays 250
4.1.7 Zuweisen von Arrays 252
4.1.8 Arrays aus Strukturvariablen 253
4.1.9 Löschen und Umdimensionieren von Arrays 254
4.1.10 Eigenschaften und Methoden von Arrays 255
4.1.11 Übergabe von Arrays 257
4.2 Verarbeiten von Zeichenketten 258
4.2.1 Zuweisen von Strings 258
4.2.2 Eigenschaften und Methoden von String-Variablen 259
4.2.3 Wichtige Methoden der String-Klasse 262
4.2.4 Die StringBuilder-Klasse 264
4.3 Reguläre Ausdrücke 267
4.3.1 Wozu werden reguläre Ausdrücke verwendet? 267
4.3.2 Eine kleine Einführung 267
4.3.3 Wichtige Methoden/Eigenschaften der Klasse Regex 268
4.3.4 Kompilierte reguläre Ausdrücke 270
4.3.5 RegexOptions-Enumeration 271
4.3.6 Metazeichen (Escape-Zeichen) 272
4.3.7 Zeichenmengen (Character Sets) 273
4.3.8 Quantifizierer 275
4.3.9 Zero-Width Assertions 276
4.3.10 Gruppen 280
4.3.11 Text ersetzen 280
4.3.12 Text splitten 281
4.4 Datums- und Zeitberechnungen 282
4.4.1 Die DateTime-Struktur 282
4.4.2 Wichtige Eigenschaften von DateTime-Variablen 284
4.4.3 Wichtige Methoden von DateTime-Variablen 284
4.4.4 Wichtige Mitglieder der DateTime-Struktur 285
4.4.5 Konvertieren von Datumstrings in DateTime-Werte 286
4.4.6 Die TimeSpan-Struktur 287
4.5 Mathematische Funktionen 289
4.5.1 Überblick 289
4.5.2 Zahlen runden 289
4.5.3 Winkel umrechnen 290
4.5.4 Potenz- und Wurzeloperationen 290
4.5.5 Logarithmus und Exponentialfunktionen 290
4.5.6 Zufallszahlen erzeugen 291
4.6 Zahlen- und Datumsformatierungen 292
4.6.1 Anwenden der ToString-Methode 292
4.6.2 Anwenden der Format-Methode 294
4.6.3 Stringinterpolation 295
4.7 Praxisbeispiele 296
4.7.1 Zeichenketten verarbeiten 296
4.7.2 Zeichenketten mit StringBuilder addieren 299
4.7.3 Reguläre Ausdrücke testen 303
4.7.4 Methodenaufrufe mit Array-Parametern 304
5 Weitere Sprachfeatures 309
5.1 Namespaces (Namensräume) 309
5.1.1 Ein kleiner Überblick 309
5.1.2 Einen eigenen Namespace einrichten 310
5.1.3 Die using-Anweisung 311
5.1.4 Namespace Alias 312
5.2 Operatorenüberladung 313
5.2.1 Syntaxregeln 313
5.2.2 Praktische Anwendung 313
5.3 Collections (Auflistungen) 314
5.3.1 Die Schnittstelle IEnumerable 315
5.3.2 ArrayList 317
5.3.3 Hashtable 319
5.3.4 Indexer 319
5.4 Generics 322
5.4.1 Klassische Vorgehensweise 322
5.4.2 Generics bieten Typsicherheit 324
5.4.3 Generische Methoden 325
5.4.4 Iteratoren 326
5.5 Generische Collections 327
5.5.1 List-Collection statt ArrayList 327
5.5.2 Vorteile generischer Collections 328
5.5.3 Constraints 328
5.6 Das Prinzip der Delegates 329
5.6.1 Delegates sind Methodenzeiger 329
5.6.2 Einen Delegate-Typ deklarieren 329
5.6.3 Ein Delegate-Objekt erzeugen 330
5.6.4 Delegates vereinfacht instanziieren 332
5.6.5 Anonyme Methoden 332
5.6.6 Lambda-Ausdrücke 334
5.6.7 Lambda-Ausdrücke in der Task Parallel Library 336
5.7 Dynamische Programmierung 338
5.7.1 Wozu dynamische Programmierung? 338
5.7.2 Das Prinzip der dynamischen Programmierung 338
5.7.3 Optionale Parameter sind hilfreich 341
5.7.4 Kovarianz und Kontravarianz 342
5.8 Weitere Datentypen 343
5.8.1 BigInteger 343
5.8.2 Complex 345
5.8.3 Tuple< >
5.8.4 SortedSet< >
5.9 Praxisbeispiele 348
5.9.1 ArrayList versus generische List 348
5.9.2 Generische IEnumerable-Interfaces implementieren 351
5.9.3 Delegates, anonyme Methoden, Lambda Expressions 355
5.9.4 Dynamischer Zugriff auf COM Interop 359
6 Einführung in LINQ 363
6.1 LINQ-Grundlagen 363
6.1.1 Die LINQ-Architektur 363
6.1.2 Anonyme Typen 365
6.1.3 Erweiterungsmethoden 366
6.2 Abfragen mit LINQ to Objects 367
6.2.1 Grundlegendes zur LINQ-Syntax 368
6.2.2 Zwei alternative Schreibweisen von LINQ-Abfragen 369
6.2.3 Übersicht der wichtigsten Abfrageoperatoren 370
6.3 LINQ-Abfragen im Detail 371
6.3.1 Die Projektionsoperatoren Select und SelectMany 372
6.3.2 Der Restriktionsoperator Where 374
6.3.3 Die Sortierungsoperatoren OrderBy und ThenBy 374
6.3.4 Der Gruppierungsoperator GroupBy 376
6.3.5 Verknüpfen mit Join 378
6.3.6 Aggregat-Operatoren 379
6.3.7 Verzögertes Ausführen von LINQ-Abfragen 381
6.3.8 Konvertierungsmethoden 382
6.3.9 Abfragen mit PLINQ 383
6.4 Praxisbeispiele 386
6.4.1 Die Syntax von LINQ-Abfragen verstehen 386
6.4.2 Aggregat-Abfragen mit LINQ 389
6.4.3 LINQ im Schnelldurchgang erlernen 391
6.4.4 Strings mit LINQ abfragen und filtern 394
6.4.5 Duplikate aus einer Liste oder einem Array entfernen 395
6.4.6 Arrays mit LINQ initialisieren 398
6.4.7 Arrays per LINQ mit Zufallszahlen füllen 400
6.4.8 Einen String mit Wiederholmuster erzeugen 402
6.4.9 Mit LINQ Zahlen und Strings sortieren 403
6.4.10 Mit LINQ Collections von Objekten sortieren 404
6.4.11 Ergebnisse von LINQ-Abfragen in ein Array kopieren 407
7 C#-Sprachneuerungen im Überblick 409
7.1 C# 4.0 – Visual Studio 2010 409
7.1.1 Datentyp dynamic 409
7.1.2 Benannte und optionale Parameter 410
7.1.3 Covarianz und Contravarianz 412
7.2 C# 5.0 – Visual Studio 2012 412
7.2.1 Async und Await 412
7.2.2 CallerInfo 412
7.3 Visual Studio 2013 413
7.4 C# 6.0 – Visual Studio 2015 413
7.4.1 String Interpolation 413
7.4.2 Schreibgeschützte AutoProperties 413
7.4.3 Initialisierer für AutoProperties 414
7.4.4 Expression Body Funktionsmember 414
7.4.5 using static 414
7.4.6 Bedingter Nulloperator 415
7.4.7 Ausnahmenfilter 415
7.4.8 nameof-Ausdrücke 416
7.4.9 await in catch und finally 416
7.4.10 Indexinitialisierer 416
7.5 C# 7.0 – Visual Studio 2017 417
7.5.1 out-Variablen 417
7.5.2 Tupel 417
7.5.3 Mustervergleich 418
7.5.4 Discards 420
7.5.5 Lokale ref-Variablen und Rückgabetypen 420
7.5.6 Lokale Funktionen 420
7.5.7 Mehr Expression-Bodied Member 420
7.5.8 throw-Ausdrücke 421
7.5.9 Verbesserung der numerischen literalen Syntax 421
Teil II: Technologien 423
8 Zugriff auf das Dateisystem 425
8.1 Grundlagen 425
8.1.1 Klassen für den Zugriff auf das Dateisystem 426
8.1.2 Statische versus Instanzen-Klasse 426
8.2 Übersichten 427
8.2.1 Methoden der Directory-Klasse 428
8.2.2 Methoden eines DirectoryInfo-Objekts 428
8.2.3 Eigenschaften eines DirectoryInfo-Objekts 428
8.2.4 Methoden der File-Klasse 429
8.2.5 Methoden eines FileInfo-Objekts 430
8.2.6 Eigenschaften eines FileInfo-Objekts 430
8.3 Operationen auf Verzeichnisebene 431
8.3.1 Existenz eines Verzeichnisses/einer Datei feststellen 431
8.3.2 Verzeichnisse erzeugen und löschen 431
8.3.3 Verzeichnisse verschieben und umbenennen 432
8.3.4 Aktuelles Verzeichnis bestimmen 432
8.3.5 Unterverzeichnisse ermitteln 433
8.3.6 Alle Laufwerke ermitteln 433
8.3.7 Dateien kopieren und verschieben 434
8.3.8 Dateien umbenennen 435
8.3.9 Dateiattribute feststellen 435
8.3.10 Verzeichnis einer Datei ermitteln 437
8.3.11 Alle im Verzeichnis enthaltenen Dateien ermitteln 437
8.3.12 Dateien und Unterverzeichnisse ermitteln 438
8.4 Zugriffsberechtigungen 439
8.4.1 ACL und ACE 439
8.4.2 SetAccessControl-Methode 439
8.4.3 Zugriffsrechte anzeigen 440
8.5 Weitere wichtige Klassen 441
8.5.1 Die Path-Klasse 441
8.5.2 Die Klasse FileSystemWatcher 442
8.5.3 Die Klasse ZipArchive 443
8.6 Datei- und Verzeichnisdialoge 445
8.6.1 OpenFileDialog und SaveFileDialog 445
8.6.2 FolderBrowserDialog 447
8.7 Praxisbeispiele 448
8.7.1 Infos über Verzeichnisse und Dateien gewinnen 448
8.7.2 Eine Verzeichnisstruktur in die TreeView einlesen 451
8.7.3 Mit LINQ und RegEx Verzeichnisbäume durchsuchen 454
9 Dateien lesen und schreiben 459
9.1 Grundprinzip der Datenpersistenz 459
9.1.1 Dateien und Streams 459
9.1.2 Die wichtigsten Klassen 460
9.1.3 Erzeugen eines Streams 461
9.2 Dateiparameter 461
9.2.1 FileAccess 461
9.2.2 FileMode 462
9.2.3 FileShare 462
9.3 Textdateien 463
9.3.1 Eine Textdatei beschreiben bzw. neu anlegen 463
9.3.2 Eine Textdatei lesen 464
9.4 Binärdateien 466
9.4.1 Lese-/Schreibzugriff 466
9.4.2 Die Methoden ReadAllBytes und WriteAllBytes 467
9.4.3 Erzeugen von BinaryReader/BinaryWriter 467
9.5 Sequenzielle Dateien 468
9.5.1 Lesen und Schreiben von strukturierten Daten 468
9.5.2 Serialisieren von Objekten 469
9.6 Dateien verschlüsseln und komprimieren 470
9.6.1 Das Methodenpärchen Encrypt/Decrypt 470
9.6.2 Verschlüsseln unter Windows Vista/7/8/10 471
9.6.3 Verschlüsseln mit der CryptoStream-Klasse 472
9.6.4 Dateien komprimieren 473
9.7 Memory Mapped Files 474
9.7.1 Grundprinzip 474
9.7.2 Erzeugen eines MMF 475
9.7.3 Erstellen eines Map View 475
9.8 Praxisbeispiele 476
9.8.1 Auf eine Textdatei zugreifen 476
9.8.2 Einen Objektbaum persistent speichern 480
9.8.3 Ein Memory Mapped File (MMF) verwenden 487
9.8.4 Hex-Dezimal-Bytes-Konverter 489
9.8.5 Eine Datei verschlüsseln 493
9.8.6 Eine Datei komprimieren 496
9.8.7 PDFs erstellen/exportieren 498
9.8.8 Eine CSV-Datei erstellen 501
9.8.9 Eine CSV-Datei mit LINQ lesen und auswerten 504
9.8.10 Einen korrekten Dateinamen erzeugen 506
10 Asynchrone Programmierung 507
10.1 Übersicht 507
10.1.1 Multitasking versus Multithreading 508
10.1.2 Deadlocks 509
10.1.3 Racing 510
10.2 Programmieren mit Threads 511
10.2.1 Einführungsbeispiel 512
10.2.2 Wichtige Thread-Methoden 513
10.2.3 Wichtige Thread-Eigenschaften 515
10.2.4 Einsatz der ThreadPool-Klasse 516
10.3 Sperrmechanismen 518
10.3.1 Threading ohne lock 518
10.3.2 Threading mit lock 520
10.3.3 Die Monitor-Klasse 522
10.3.4 Mutex 526
10.3.5 Methoden für die parallele Ausführung sperren 527
10.3.6 Semaphore 528
10.4 Interaktion mit der Programmoberfläche 529
10.4.1 Die Werkzeuge 530
10.4.2 Einzelne Steuerelemente mit Invoke aktualisieren 530
10.4.3 Mehrere Steuerelemente aktualisieren 532
10.4.4 Ist ein Invoke-Aufruf nötig? 532
10.4.5 Und was ist mit WPF? 533
10.5 Timer-Threads 535
10.6 Die BackgroundWorker-Komponente 536
10.7 Asynchrone Programmierentwurfsmuster 538
10.7.1 Kurzübersicht 539
10.7.2 Polling 540
10.7.3 Callback verwenden 542
10.7.4 Callback mit Parameterübergabe verwenden 542
10.7.5 Callback mit Zugriff auf die Programmoberfläche 544
10.8 Asynchroner Aufruf beliebiger Methoden 545
10.8.1 Die Beispielklasse 545
10.8.2 Asynchroner Aufruf ohne Callback 546
10.8.3 Asynchroner Aufruf mit Callback und Anzeigefunktion 547
10.8.4 Aufruf mit Rückgabewerten (per Eigenschaft) 548
10.8.5 Aufruf mit Rückgabewerten (per EndInvoke) 549
10.9 Es geht auch einfacher – async und await 550
10.9.1 Der Weg von synchron zu asynchron 550
10.9.2 Achtung: Fehlerquellen! 552
10.9.3 Eigene asynchrone Methoden entwickeln 554
10.10 Praxisbeispiele 557
10.10.1 Spieltrieb & Multithreading erleben
10.10.2 Prozess- und Thread-Informationen gewinnen 570
10.10.3 Ein externes Programm starten 575
11 Die Task Parallel Library 579
11.1 Überblick 579
11.1.1 Parallel-Programmierung 579
11.1.2 Möglichkeiten der TPL 582
11.1.3 Der CLR-Threadpool 582
11.2 Parallele Verarbeitung mit Parallel.Invoke 583
11.2.1 Aufrufvarianten 584
11.2.2 Einschränkungen 585
11.3 Verwendung von Parallel.For 585
11.3.1 Abbrechen der Verarbeitung 587
11.3.2 Auswerten des Verarbeitungsstatus 588
11.3.3 Und was ist mit anderen Iterator-Schrittweiten? 589
11.4 Collections mit Parallel.ForEach verarbeiten 590
11.5 Die Task-Klasse 591
11.5.1 Einen Task erzeugen 591
11.5.2 Den Task starten 592
11.5.3 Datenübergabe an den Task 594
11.5.4 Wie warte ich auf das Ende des Task? 595
11.5.5 Tasks mit Rückgabewerten 597
11.5.6 Die Verarbeitung abbrechen 600
11.5.7 Fehlerbehandlung 604
11.5.8 Weitere Eigenschaften 605
11.6 Zugriff auf das User-Interface 606
11.6.1 Task-Ende und Zugriff auf die Oberfläche 606
11.6.2 Zugriff auf das UI aus dem Task heraus 608
11.7 Weitere Datenstrukturen im Überblick 610
11.7.1 Threadsichere Collections 610
11.7.2 Primitive für die Threadsynchronisation 611
11.8 Parallel LINQ (PLINQ) 611
11.9 Praxisbeispiel: Spieltrieb – Version 2 611
11.9.1 Aufgabenstellung 612
11.9.2 Global-Klasse 612
11.9.3 Controller-Klasse 613
11.9.4 LKW-Klasse 615
11.9.5 Schiff-Klasse 616
11.9.6 Oberfläche 619
12 Fehlersuche und Behandlung 621
12.1 Der Debugger 621
12.1.1 Allgemeine Beschreibung 621
12.1.2 Die wichtigsten Fenster 622
12.1.3 Debugging-Optionen 625
12.1.4 Praktisches Debugging am Beispiel 628
12.2 Arbeiten mit Debug und Trace 632
12.2.1 Wichtige Methoden von Debug und Trace 632
12.2.2 Besonderheiten der Trace-Klasse 636
12.2.3 TraceListener-Objekte 637
12.3 Caller Information 639
12.3.1 Attribute 639
12.3.2 Anwendung 640
12.4 Fehlerbehandlung 641
12.4.1 Anweisungen zur Fehlerbehandlung 641
12.4.2 try-catch 641
12.4.3 try-finally 646
12.4.4 Das Standardverhalten bei Ausnahmen festlegen 649
12.4.5 Die Exception-Klasse 650
12.4.6 Fehler/Ausnahmen auslösen 651
12.4.7 Eigene Fehlerklassen 651
12.4.8 Exceptionhandling zur Entwurfszeit 653
12.4.9 Code Contracts 654
13 XML in Theorie und Praxis 655
13.1 XML – etwas Theorie 655
13.1.1 Übersicht 655
13.1.2 Der XML-Grundaufbau 658
13.1.3 Wohlgeformte Dokumente 659
13.1.4 Processing Instructions (PI) 661
13.1.5 Elemente und Attribute 662
13.1.6 Verwendbare Zeichensätze 663
13.2 XSD-Schemas 666
13.2.1 XSD-Schemas und ADO.NET 666
13.2.2 XML-Schemas in Visual Studio analysieren 668
13.2.3 XML-Datei mit XSD-Schema erzeugen 672
13.2.4 XSD-Schema aus einer XML-Datei erzeugen 673
13.3 Verwendung des DOM unter .NET 673
13.3.1 Übersicht 673
13.3.2 DOM-Integration in C# 675
13.3.3 Laden von Dokumenten 675
13.3.4 Erzeugen von XML-Dokumenten 676
13.3.5 Auslesen von XML-Dateien 678
13.3.6 Direktzugriff auf einzelne Elemente 679
13.3.7 Einfügen von Informationen 680
13.3.8 Suchen in den Baumzweigen 683
13.4 XML-Verarbeitung mit LINQ to XML 686
13.4.1 Die LINQ to XML-API 686
13.4.2 Neue XML-Dokumente erzeugen 688
13.4.3 Laden und Sichern von XML-Dokumenten 690
13.4.4 Navigieren in XML-Daten 691
13.4.5 Auswählen und Filtern 693
13.4.6 Manipulieren der XML-Daten 694
13.4.7 XML-Dokumente transformieren 695
13.5 Weitere Möglichkeiten der XML-Verarbeitung 698
13.5.1 XML-Daten aus Objektstrukturen erzeugen 698
13.5.2 Schnelles Suchen in XML-Daten mit XPathNavigator 702
13.5.3 Schnelles Auslesen von XML-Daten mit XmlReader 704
13.5.4 Erzeugen von XML-Daten mit XmlWriter 706
13.5.5 XML transformieren mit XSLT 708
13.6 JSON – JavaScriptObjectNotation 710
13.6.1 Grundlagen 710
13.6.2 De-/Serialisierung mit JSON 710
13.7 Praxisbeispiele 713
13.7.1 Mit dem DOM in XML-Dokumenten navigieren 713
13.7.2 XML-Daten in eine TreeView einlesen 717
13.7.3 In Dokumenten mit dem XPathNavigator navigieren 721
14 Einführung in ADO.NET und Entity Framework 727
14.1 Eine kleine Übersicht 727
14.1.1 Die ADO.NET-Klassenhierarchie 727
14.1.2 Die Klassen der Datenprovider 729
14.1.3 Das Zusammenspiel der ADO.NET-Klassen 731
14.2 Das Connection-Objekt 732
14.2.1 Allgemeiner Aufbau 732
14.2.2 SqlConnection 732
14.2.3 Schließen einer Verbindung 733
14.2.4 Eigenschaften des Connection-Objekts 734
14.2.5 Methoden des Connection-Objekts 736
14.2.6 Der ConnectionStringBuilder 737
14.3 Das Command-Objekt 737
14.3.1 Erzeugen und Anwenden eines Command-Objekts 738
14.3.2 Erzeugen mittels CreateCommand-Methode 739
14.3.3 Eigenschaften des Command-Objekts 739
14.3.4 Methoden des Command-Objekts 741
14.3.5 Freigabe von Connection- und Command-Objekten 743
14.4 Parameter-Objekte 744
14.4.1 Erzeugen und Anwenden eines Parameter-Objekts 744
14.4.2 Eigenschaften des Parameter-Objekts 745
14.5 Das CommandBuilder-Objekt 746
14.5.1 Erzeugen 746
14.5.2 Anwenden 746
14.6 Das DataReader-Objekt 747
14.6.1 DataReader erzeugen 747
14.6.2 Daten lesen 748
14.6.3 Eigenschaften des DataReaders 749
14.6.4 Methoden des DataReaders 749
14.7 Das DataAdapter-Objekt 750
14.7.1 DataAdapter erzeugen 750
14.7.2 Command-Eigenschaften 751
14.7.3 Fill-Methode 752
14.7.4 Update-Methode 753
14.8 Entity Framework 754
14.8.1 Überblick 754
14.8.2 DatabaseFirst 756
14.8.3 CodeFirst 764
14.9 Praxisbeispiele 769
14.9.1 Wichtige ADO.NET-Objekte im Einsatz 769
14.9.2 Eine Aktionsabfrage ausführen 771
14.9.3 Eine StoredProcedure aufrufen 773
14.9.4 Die Datenbank aktualisieren 776
15 Das DataSet 781
15.1 Grundlegende Features des DataSets 781
15.1.1 Die Objekthierarchie 782
15.1.2 Die wichtigsten Klassen 782
15.1.3 Erzeugen eines DataSets 783
15.2 Das DataTable-Objekt 785
15.2.1 DataTable erzeugen 785
15.2.2 Spalten hinzufügen 785
15.2.3 Zeilen zur DataTable hinzufügen 786
15.2.4 Auf den Inhalt einer DataTable zugreifen 787
15.3 Die DataView 789
15.3.1 Erzeugen einer DataView 790
15.3.2 Sortieren und Filtern von Datensätzen 790
15.3.3 Suchen von Datensätzen 791
15.4 Typisierte DataSets 791
15.4.1 Ein typisiertes DataSet erzeugen 792
15.4.2 Das Konzept der Datenquellen 793
15.4.3 Typisierte DataSets und TableAdapter 794
15.5 Die Qual der Wahl 795
15.5.1 DataReader – der schnelle Lesezugriff 796
15.5.2 DataSet – die Datenbank im Hauptspeicher 796
15.5.3 Objektrelationales Mapping – die Zukunft? 797
15.6 Praxisbeispiele 798
15.6.1 In der DataView sortieren und filtern 798
15.6.2 Suche nach Datensätzen 800
15.6.3 Ein DataSet in einen XML-String serialisieren 802
15.6.4 Untypisiertes DataSet in ein typisiertes konvertieren 806
16 Verteilen von Anwendungen 813
16.1 ClickOnce-Deployment 814
16.1.1 Übersicht/Einschränkungen 814
16.1.2 Die Vorgehensweise 815
16.1.3 Ort der Veröffentlichung 815
16.1.4 Anwendungsdateien 816
16.1.5 Erforderliche Komponenten 817
16.1.6 Aktualisierungen 818
16.1.7 Veröffentlichungsoptionen 819
16.1.8 Veröffentlichen 820
16.1.9 Verzeichnisstruktur 820
16.1.10 Der Webpublishing-Assistent 822
16.1.11 Neue Versionen erstellen 823
16.2 Setup-Projekte 823
16.2.1 Installation 823
16.2.2 Ein neues Setup-Projekt 825
16.2.3 Dateisystem-Editor 830
16.2.4 Registrierungs-Editor 831
16.2.5 Dateityp-Editor 832
16.2.6 Benutzeroberflächen-Editor 832
16.2.7 Editor für benutzerdefinierte Aktionen 833
16.2.8 Editor für Startbedingungen 834
17 Weitere Techniken 835
17.1 Zugriff auf die Zwischenablage 835
17.1.1 Das Clipboard-Objekt 835
17.1.2 Zwischenablage-Funktionen für Textboxen 837
17.2 Arbeiten mit der Registry 838
17.2.1 Allgemeines 838
17.2.2 Registry-Unterstützung in .NET 840
17.3 .NET-Reflection 841
17.3.1 Übersicht 841
17.3.2 Assembly laden 842
17.3.3 Mittels GetType und Type Informationen sammeln 842
17.3.4 Dynamisches Laden von Assemblies 845
17.4 Praxisbeispiele 848
17.4.1 Zugriff auf die Registry 848
17.4.2 Dateiverknüpfungen erzeugen 850
17.4.3 Betrachter für Manifestressourcen 852
17.4.4 Die Zwischenablage überwachen und anzeigen 855
17.4.5 Die WIA-Library kennenlernen 858
17.4.6 Auf eine Webcam zugreifen 869
17.4.7 Auf den Scanner zugreifen 871
17.4.8 OpenOffice.org Writer per OLE steuern 877
17.4.9 Nutzer und Gruppen des aktuellen Systems ermitteln 884
17.4.10 Testen, ob Nutzer in einer Gruppe enthalten ist 886
17.4.11 Testen, ob der Nutzer ein Administrator ist 888
17.4.12 Die IP-Adressen des Computers bestimmen 889
17.4.13 Die IP-Adresse über den Hostnamen bestimmen 890
17.4.14 Diverse Systeminformationen ermitteln 891
17.4.15 Alles über den Bildschirm erfahren 899
17.4.16 Sound per MCI aufnehmen 901
17.4.17 Mikrofonpegel anzeigen 904
17.4.18 Pegeldiagramm aufzeichnen 906
17.4.19 Sound-und Videodateien per MCI abspielen 909
18 Konsolenanwendungen 919
18.1 Grundaufbau/Konzepte 919
18.1.1 Unser Hauptprogramm – Program.cs 920
18.1.2 Rückgabe eines Fehlerstatus 921
18.1.3 Parameterübergabe 922
18.1.4 Zugriff auf die Umgebungsvariablen 924
18.2 Die Kommandozentrale: System.Console 925
18.2.1 Eigenschaften 925
18.2.2 Methoden/Ereignisse 926
18.2.3 Textausgaben 926
18.2.4 Farbangaben 927
18.2.5 Tastaturabfragen 929
18.2.6 Arbeiten mit Streamdaten 930
18.3 Praxisbeispiel 932
18.3.1 Farbige Konsolenanwendung 932
18.3.2 Weitere Hinweise und Beispiele 934
Anhang A: Glossar 935
Anhang B: Wichtige Dateiextensions 939
Index 941

"Die leicht verständliche und stets gut nachvollziehbare Beschreibung von Visual C# 2017 ist den Autoren gut gelungen.In der Neuauflage des Klassikers zur Programmierung mit Visual C# sind erstmals zwei zusätzliche Autoren mit an Bord. Mit vereinten Kräften wurden die Inhalte an die aktuelle Version von Visual Studio sowie von C# angepasst und überarbeitet. Wie bereits in den vorangegangenen Auflagen hat man auch dieses Mal die Schwerpunkte entsprechend der neuen Entwicklungen aktualisiert. So wurde die Programmierung von Windows-Apps beispielsweise wieder entfernt und ein kurzes Kapitel am Ende widmet sich jetzt den Konsolenanwendungen. Viele Inhalte des Handbuchs aus den vergangenen Jahren können allerdings weiterhin als kostenloser Bonusinhalt geladen werden." Jan Tittel, dotnetpro, Juli 2018

"Die leicht verständliche und stets gut nachvollziehbare Beschreibung von Visual C# 2017 ist den Autoren gut gelungen.In der Neuauflage des Klassikers zur Programmierung mit Visual C# sind erstmals zwei zusätzliche Autoren mit an Bord. Mit vereinten Kräften wurden die Inhalte an die aktuelle Version von Visual Studio sowie von C# angepasst und überarbeitet. Wie bereits in den vorangegangenen Auflagen hat man auch dieses Mal die Schwerpunkte entsprechend der neuen Entwicklungen aktualisiert. So wurde die Programmierung von Windows-Apps beispielsweise wieder entfernt und ein kurzes Kapitel am Ende widmet sich jetzt den Konsolenanwendungen. Viele Inhalte des Handbuchs aus den vergangenen Jahren können allerdings weiterhin als kostenloser Bonusinhalt geladen werden." Jan Tittel, dotnetpro, Juli 2018

Erscheinungsdatum
Verlagsort München
Sprache deutsch
Gewicht 1896 g
Einbandart gebunden
Themenwelt Informatik Programmiersprachen / -werkzeuge NET Programmierung
Informatik Programmiersprachen / -werkzeuge C#
Informatik Software Entwicklung Mobile- / App-Entwicklung
Informatik Software Entwicklung Objektorientierung
Schlagworte Grafikprogrammierung • LINQ • Visual C¿ • Visual C¿ • Visual Studio 2017
ISBN-10 3-446-45359-8 / 3446453598
ISBN-13 978-3-446-45359-3 / 9783446453593
Zustand Neuware
Haben Sie eine Frage zum Produkt?
Mehr entdecken
aus dem Bereich
Grundlagen, Profiwissen und Rezepte

von Jürgen Kotz; Christian Wenz

Buch (2024)
Carl Hanser (Verlag)
49,99