Visual C# 2015 – Grundlagen, Profiwissen und Rezepte (eBook)
1195 Seiten
Hanser, Carl (Verlag)
978-3-446-44606-9 (ISBN)
- Für Einsteiger, Fortgeschrittene und Profis
- Übungs- und Nachschlagewerk mit genialen Rezepten zu jedem Thema
- EXTRA: 700 Seiten Bonuskapitel zur GUI-Entwicklung mit WPF und Windows Forms
- Im Internet: Bonuskapitel sowie alle Beispiele aus dem Buch
Dieser Klassiker der C#-/.NET-Programmierung bietet Ihnen Informationen und Rezepte, nach denen Sie anderswo vergeblich suchen. Einsteiger erhalten ein umfangreiches Praktikum zu den Grundlagen der .NET-Programmierung mit Visual C# 2015, dem Profi liefert es fortgeschrittene Programmiertechniken zu allen wesentlichen Einsatzgebieten der Windowsprogrammierung. 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 durchaus spannende Lektüre auch für die Zeit nach der Arbeit.
Die Themenkomplexe im Buch:
Teil I: Grundlagen der Programmierung mit Visual C# 2015
Teil II: Technologien
Teil III: Windows Apps
Die Themenkomplexe im Internet:
Teil IV: WPF-Anwendungen
Teil V: Windows Forms
AUS DEM INHALT //
Grundlagen der Sprache // OOP-Konzepte // Einführung in LINQ // Dateien & Dateisystem // XML-Dateien // Asynchrone Programmierung & Task Parallel Library // Fehlersuche und Behandlung // Datenbankzugriff mit ADO.NET // Verteilen von Anwendungen // App-Oberflächen entwerfen // Apps im Detail // GUI-Entwicklung mit WPF und Windows Forms
Walter Doberenz und Thomas Gewinnus haben sich als Entwickler, Dozenten und Fachbuchautoren für Microsoft- und Borland- Entwicklerwerkzeuge einen Namen gemacht, ihre Fachbücher sind seit Jahren als Standardwerke etabliert.
Inhaltsverzeichnis 6
Vorwort 46
Teil I: Grundlagen 50
1 Einstieg in Visual Studio 2015 52
1.1 Die Installation von Visual Studio 2015 52
1.1.1 Überblick über die Produktpalette 52
1.1.2 Anforderungen an Hard- und Software 53
1.2 Unser allererstes C#-Programm 54
1.2.1 Vorbereitungen 54
1.2.2 Quellcode schreiben 56
1.2.3 Programm kompilieren und testen 56
1.2.4 Einige Erläuterungen zum Quellcode 57
1.2.5 Konsolenanwendungen sind out 58
1.3 Die Windows-Philosophie 58
1.3.1 Mensch-Rechner-Dialog 58
1.3.2 Objekt- und ereignisorientierte Programmierung 59
1.3.3 Programmieren mit Visual Studio 2015 60
1.4 Die Entwicklungsumgebung Visual Studio 2015 61
1.4.1 Neues Projekt 62
1.4.2 Die wichtigsten Fenster 63
1.5 Microsofts .NET-Technologie 66
1.5.1 Zur Geschichte von .NET 66
1.5.2 .NET-Features und Begriffe 68
1.6 Wichtige Neuigkeiten in Visual Studio 2015 75
1.6.1 Entwicklungsumgebung 75
1.6.2 Neue C#-Sprachfeatures 75
1.6.3 Code-Editor 76
1.6.4 NET Framework 4.6 76
1.7 Praxisbeispiele 77
1.7.1 Unsere erste Windows Forms-Anwendung 77
1.7.2 Umrechnung Euro-Dollar 81
2 Grundlagen der Sprache C# 90
2.1 Grundbegriffe 90
2.1.1 Anweisungen 90
2.1.2 Bezeichner 91
2.1.3 Schlüsselwörter 92
2.1.4 Kommentare 92
2.2 Datentypen, Variablen und Konstanten 93
2.2.1 Fundamentale Typen 93
2.2.2 Wertetypen versus Verweistypen 94
2.2.3 Benennung von Variablen 95
2.2.4 Deklaration von Variablen 95
2.2.5 Typsuffixe 97
2.2.6 Zeichen und Zeichenketten 98
2.2.7 object-Datentyp 100
2.2.8 Konstanten deklarieren 100
2.2.9 Nullable Types 101
2.2.10 Typinferenz 102
2.2.11 Gültigkeitsbereiche und Sichtbarkeit 103
2.3 Konvertieren von Datentypen 103
2.3.1 Implizite und explizite Konvertierung 103
2.3.2 Welcher Datentyp passt zu welchem? 105
2.3.3 Konvertieren von string 106
2.3.4 Die Convert-Klasse 108
2.3.5 Die Parse-Methode 108
2.3.6 Boxing und Unboxing 109
2.4 Operatoren 110
2.4.1 Arithmetische Operatoren 111
2.4.2 Zuweisungsoperatoren 112
2.4.3 Logische Operatoren 113
2.4.4 Rangfolge der Operatoren 116
2.5 Kontrollstrukturen 117
2.5.1 Verzweigungsbefehle 117
2.5.2 Schleifenanweisungen 120
2.6 Benutzerdefinierte Datentypen 123
2.6.1 Enumerationen 123
2.6.2 Strukturen 124
2.7 Nutzerdefinierte Methoden 126
2.7.1 Methoden mit Rückgabewert 127
2.7.2 Methoden ohne Rückgabewert 128
2.7.3 Parameterübergabe mit ref 129
2.7.4 Parameterübergabe mit out 130
2.7.5 Methodenüberladung 131
2.7.6 Optionale Parameter 132
2.7.7 Benannte Parameter 133
2.8 Praxisbeispiele 134
2.8.1 Vom PAP zur Konsolenanwendung 134
2.8.2 Ein Konsolen- in ein Windows-Programm verwandeln 136
2.8.3 Schleifenanweisungen verstehen 138
2.8.4 Benutzerdefinierte Methoden überladen 140
2.8.5 Anwendungen von Visual Basic nach C# portieren 143
3 OOP-Konzepte 150
3.1 Kleine Einführung in die OOP 150
3.1.1 Historische Entwicklung 150
3.1.2 Grundbegriffe der OOP 152
3.1.3 Sichtbarkeit von Klassen und ihren Mitgliedern 154
3.1.4 Allgemeiner Aufbau einer Klasse 155
3.1.5 Das Erzeugen eines Objekts 156
3.1.6 Einführungsbeispiel 159
3.2 Eigenschaften 164
3.2.1 Eigenschaften mit Zugriffsmethoden kapseln 164
3.2.2 Berechnete Eigenschaften 166
3.2.3 Lese-/Schreibschutz 168
3.2.4 Property-Accessoren 169
3.2.5 Statische Felder/Eigenschaften 169
3.2.6 Einfache Eigenschaften automatisch implementieren 172
3.3 Methoden 173
3.3.1 Öffentliche und private Methoden 173
3.3.2 Überladene Methoden 174
3.3.3 Statische Methoden 175
3.4 Ereignisse 177
3.4.1 Ereignis hinzufügen 177
3.4.2 Ereignis verwenden 180
3.5 Arbeiten mit Konstruktor und Destruktor 183
3.5.1 Konstruktor und Objektinitialisierer 183
3.5.2 Destruktor und Garbage Collector 186
3.5.3 Mit using den Lebenszyklus des Objekts kapseln 189
3.5.4 Verzögerte Initialisierung 189
3.6 Vererbung und Polymorphie 190
3.6.1 Klassendiagramm 190
3.6.2 Method-Overriding 191
3.6.3 Klassen implementieren 192
3.6.4 Implementieren der Objekte 195
3.6.5 Ausblenden von Mitgliedern durch Vererbung 197
3.6.6 Allgemeine Hinweise und Regeln zur Vererbung 198
3.6.7 Polymorphes Verhalten 200
3.6.8 Die Rolle von System.Object 202
3.7 Spezielle Klassen 203
3.7.1 Abstrakte Klassen 203
3.7.2 Versiegelte Klassen 205
3.7.3 Partielle Klassen 205
3.7.4 Statische Klassen 206
3.8 Schnittstellen (Interfaces) 207
3.8.1 Definition einer Schnittstelle 208
3.8.2 Implementieren einer Schnittstelle 208
3.8.3 Abfragen, ob Schnittstelle vorhanden ist 209
3.8.4 Mehrere Schnittstellen implementieren 210
3.8.5 Schnittstellenprogrammierung ist ein weites Feld 210
3.9 Praxisbeispiele 210
3.9.1 Eigenschaften sinnvoll kapseln 210
3.9.2 Eine statische Klasse anwenden 213
3.9.3 Vom fetten zum schlanken Client 215
3.9.4 Schnittstellenvererbung verstehen 227
3.9.5 Rechner für komplexe Zahlen 232
3.9.6 Formel-Rechner mit dem CodeDOM 241
3.9.7 Berechnungsergebnisse als Diagramm darstellen 249
3.9.8 Sortieren mit IComparable/IComparer 253
3.9.9 Einen Objektbaum in generischen Listen abspeichern 258
3.9.10 OOP beim Kartenspiel erlernen 264
3.9.11 Eine Klasse zur Matrizenrechnung entwickeln 268
4 Arrays, Strings, Funktionen 274
4.1 Datenfelder (Arrays) 274
4.1.1 Array deklarieren 274
4.1.2 Array instanziieren 275
4.1.3 Array initialisieren 275
4.1.4 Zugriff auf Array-Elemente 276
4.1.5 Zugriff mittels Schleife 277
4.1.6 Mehrdimensionale Arrays 278
4.1.7 Zuweisen von Arrays 280
4.1.8 Arrays aus Strukturvariablen 281
4.1.9 Löschen und Umdimensionieren von Arrays 282
4.1.10 Eigenschaften und Methoden von Arrays 283
4.1.11 Übergabe von Arrays 285
4.2 Verarbeiten von Zeichenketten 286
4.2.1 Zuweisen von Strings 286
4.2.2 Eigenschaften und Methoden von String-Variablen 287
4.2.3 Wichtige Methoden der String-Klasse 289
4.2.4 Die StringBuilder-Klasse 291
4.3 Reguläre Ausdrücke 293
4.3.1 Wozu werden reguläre Ausdrücke verwendet? 294
4.3.2 Eine kleine Einführung 294
4.3.3 Wichtige Methoden/Eigenschaften der Klasse Regex 295
4.3.4 Kompilierte reguläre Ausdrücke 297
4.3.5 RegexOptions-Enumeration 298
4.3.6 Metazeichen (Escape-Zeichen) 298
4.3.7 Zeichenmengen (Character Sets) 299
4.3.8 Quantifizierer 301
4.3.9 Zero-Width Assertions 302
4.3.10 Gruppen 305
4.3.11 Text ersetzen 306
4.3.12 Text splitten 307
4.4 Datums- und Zeitberechnungen 308
4.4.1 Die DateTime-Struktur 308
4.4.2 Wichtige Eigenschaften von DateTime-Variablen 309
4.4.3 Wichtige Methoden von DateTime-Variablen 310
4.4.4 Wichtige Mitglieder der DateTime-Struktur 310
4.4.5 Konvertieren von Datumstrings in DateTime-Werte 311
4.4.6 Die TimeSpan-Struktur 312
4.5 Mathematische Funktionen 313
4.5.1 Überblick 313
4.5.2 Zahlen runden 314
4.5.3 Winkel umrechnen 314
4.5.4 Potenz- und Wurzeloperationen 314
4.5.5 Logarithmus und Exponentialfunktionen 315
4.5.6 Zufallszahlen erzeugen 315
4.6 Zahlen- und Datumsformatierungen 316
4.6.1 Anwenden der ToString-Methode 316
4.6.2 Anwenden der Format-Methode 318
4.6.3 Stringinterpolation 319
4.7 Praxisbeispiele 320
4.7.1 Zeichenketten verarbeiten 320
4.7.2 Zeichenketten mit StringBuilder addieren 323
4.7.3 Reguläre Ausdrücke testen 326
4.7.4 Methodenaufrufe mit Array-Parametern 328
5 Weitere Sprachfeatures 332
5.1 Namespaces (Namensräume) 332
5.1.1 Ein kleiner Überblick 332
5.1.2 Einen eigenen Namespace einrichten 333
5.1.3 Die using-Anweisung 334
5.1.4 Namespace Alias 335
5.1.5 Namespace Alias Qualifizierer 335
5.2 Operatorenüberladung 336
5.2.1 Syntaxregeln 336
5.2.2 Praktische Anwendung 337
5.3 Collections (Auflistungen) 338
5.3.1 Die Schnittstelle IEnumerable 338
5.3.2 ArrayList 340
5.3.3 Hashtable 342
5.3.4 Indexer 342
5.4 Generics 344
5.4.1 Klassische Vorgehensweise 345
5.4.2 Generics bieten Typsicherheit 346
5.4.3 Generische Methoden 347
5.4.4 Iteratoren 348
5.5 Generische Collections 349
5.5.1 List-Collection statt ArrayList 349
5.5.2 Vorteile generischer Collections 350
5.5.3 Constraints 350
5.6 Das Prinzip der Delegates 350
5.6.1 Delegates sind Methodenzeiger 351
5.6.2 Einen Delegate-Typ deklarieren 351
5.6.3 Ein Delegate-Objekt erzeugen 351
5.6.4 Delegates vereinfacht instanziieren 353
5.6.5 Anonyme Methoden 354
5.6.6 Lambda-Ausdrücke 355
5.6.7 Lambda-Ausdrücke in der Task Parallel Library 357
5.7 Dynamische Programmierung 359
5.7.1 Wozu dynamische Programmierung? 359
5.7.2 Das Prinzip der dynamischen Programmierung 359
5.7.3 Optionale Parameter sind hilfreich 362
5.7.4 Kovarianz und Kontravarianz 363
5.8 Weitere Datentypen 363
5.8.1 BigInteger 363
5.8.2 Complex 366
5.8.3 Tuple< >
5.8.4 SortedSet< >
5.9 Praxisbeispiele 368
5.9.1 ArrayList versus generische List 368
5.9.2 Generische IEnumerable-Interfaces implementieren 372
5.9.3 Delegates, anonyme Methoden, Lambda Expressions 375
5.9.4 Dynamischer Zugriff auf COM Interop 379
6 Einführung in LINQ 382
6.1 LINQ-Grundlagen 382
6.1.1 Die LINQ-Architektur 382
6.1.2 Anonyme Typen 383
6.1.3 Erweiterungsmethoden 385
6.2 Abfragen mit LINQ to Objects 386
6.2.1 Grundlegendes zur LINQ-Syntax 386
6.2.2 Zwei alternative Schreibweisen von LINQ Abfragen 387
6.2.3 Übersicht der wichtigsten Abfrage-Operatoren 388
6.3 LINQ-Abfragen im Detail 389
6.3.1 Die Projektionsoperatoren Select und SelectMany 390
6.3.2 Der Restriktionsoperator Where 391
6.3.3 Die Sortierungsoperatoren OrderBy und ThenBy 392
6.3.4 Der Gruppierungsoperator GroupBy 393
6.3.5 Verknüpfen mit Join 396
6.3.6 Aggregat-Operatoren 396
6.3.7 Verzögertes Ausführen von LINQ-Abfragen 398
6.3.8 Konvertierungsmethoden 399
6.3.9 Abfragen mit PLINQ 399
6.4 Praxisbeispiele 402
6.4.1 Die Syntax von LINQ-Abfragen verstehen 402
6.4.2 Aggregat-Abfragen mit LINQ 405
6.4.3 LINQ im Schnelldurchgang erlernen 408
6.4.4 Strings mit LINQ abfragen und filtern 410
6.4.5 Duplikate aus einer Liste oder einem Array entfernen 411
6.4.6 Arrays mit LINQ initialisieren 414
6.4.7 Arrays per LINQ mit Zufallszahlen füllen 416
6.4.8 Einen String mit Wiederholmuster erzeugen 418
6.4.9 Mit LINQ Zahlen und Strings sortieren 419
6.4.10 Mit LINQ Collections von Objekten sortieren 420
6.4.11 Ergebnisse von LINQ-Abfragen in ein Array kopieren 423
Teil II: Technologien 424
7 Zugriff auf das Dateisystem 426
7.1 Grundlagen 426
7.1.1 Klassen für den Zugriff auf das Dateisystem 427
7.1.2 Statische versus Instanzen-Klasse 427
7.2 Übersichten 428
7.2.1 Methoden der Directory-Klasse 428
7.2.2 Methoden eines DirectoryInfo-Objekts 429
7.2.3 Eigenschaften eines DirectoryInfo-Objekts 429
7.2.4 Methoden der File-Klasse 429
7.2.5 Methoden eines FileInfo-Objekts 430
7.2.6 Eigenschaften eines FileInfo-Objekts 431
7.3 Operationen auf Verzeichnisebene 431
7.3.1 Existenz eines Verzeichnisses/einer Datei feststellen 431
7.3.2 Verzeichnisse erzeugen und löschen 432
7.3.3 Verzeichnisse verschieben und umbenennen 432
7.3.4 Aktuelles Verzeichnis bestimmen 433
7.3.5 Unterverzeichnisse ermitteln 433
7.3.6 Alle Laufwerke ermitteln 433
7.3.7 Dateien kopieren und verschieben 434
7.3.8 Dateien umbenennen 435
7.3.9 Dateiattribute feststellen 435
7.3.10 Verzeichnis einer Datei ermitteln 437
7.3.11 Alle im Verzeichnis enthaltenen Dateien ermitteln 437
7.3.12 Dateien und Unterverzeichnisse ermitteln 437
7.4 Zugriffsberechtigungen 438
7.4.1 ACL und ACE 438
7.4.2 SetAccessControl-Methode 439
7.4.3 Zugriffsrechte anzeigen 439
7.5 Weitere wichtige Klassen 440
7.5.1 Die Path-Klasse 440
7.5.2 Die Klasse FileSystemWatcher 441
7.6 Datei- und Verzeichnisdialoge 442
7.6.1 OpenFileDialog und SaveFileDialog 443
7.6.2 FolderBrowserDialog 444
7.7 Praxisbeispiele 445
7.7.1 Infos über Verzeichnisse und Dateien gewinnen 445
7.7.2 Eine Verzeichnisstruktur in die TreeView einlesen 449
7.7.3 Mit LINQ und RegEx Verzeichnisbäume durchsuchen 451
8 Dateien lesen und schreiben 456
8.1 Grundprinzip der Datenpersistenz 456
8.1.1 Dateien und Streams 456
8.1.2 Die wichtigsten Klassen 457
8.1.3 Erzeugen eines Streams 458
8.2 Dateiparameter 458
8.2.1 FileAccess 458
8.2.2 FileMode 458
8.2.3 FileShare 459
8.3 Textdateien 459
8.3.1 Eine Textdatei beschreiben bzw. neu anlegen 459
8.3.2 Eine Textdatei lesen 461
8.4 Binärdateien 462
8.4.1 Lese-/Schreibzugriff 462
8.4.2 Die Methoden ReadAllBytes und WriteAllBytes 463
8.4.3 Erzeugen von BinaryReader/BinaryWriter 463
8.5 Sequenzielle Dateien 464
8.5.1 Lesen und schreiben von strukturierten Daten 464
8.5.2 Serialisieren von Objekten 465
8.6 Dateien verschlüsseln und komprimieren 466
8.6.1 Das Methodenpärchen Encrypt/Decrypt 466
8.6.2 Verschlüsseln unter Windows Vista/7/8/10 466
8.6.3 Verschlüsseln mit der CryptoStream-Klasse 467
8.6.4 Dateien komprimieren 468
8.7 Memory Mapped Files 469
8.7.1 Grundprinzip 469
8.7.2 Erzeugen eines MMF 470
8.7.3 Erstellen eines Map View 471
8.8 Praxisbeispiele 472
8.8.1 Auf eine Textdatei zugreifen 472
8.8.2 Einen Objektbaum persistent speichern 475
8.8.3 Ein Memory Mapped File (MMF) verwenden 482
8.8.4 Hex-Dezimal-Bytes-Konverter 484
8.8.5 Eine Datei verschlüsseln 488
8.8.6 Eine Datei komprimieren 491
8.8.7 Echte ZIP-Dateien erstellen 493
8.8.8 PDFs erstellen/exportieren 495
8.8.9 Eine CSV-Datei erstellen 498
8.8.10 Eine CSV-Datei mit LINQ lesen und auswerten 501
8.8.11 Einen korrekten Dateinamen erzeugen 504
9 Asynchrone Programmierung 506
9.1 Übersicht 506
9.1.1 Multitasking versus Multithreading 507
9.1.2 Deadlocks 508
9.1.3 Racing 508
9.2 Programmieren mit Threads 510
9.2.1 Einführungsbeispiel 510
9.2.2 Wichtige Thread-Methoden 511
9.2.3 Wichtige Thread-Eigenschaften 513
9.2.4 Einsatz der ThreadPool-Klasse 514
9.3 Sperrmechanismen 516
9.3.1 Threading ohne lock 516
9.3.2 Threading mit lock 518
9.3.3 Die Monitor-Klasse 520
9.3.4 Mutex 523
9.3.5 Methoden für die parallele Ausführung sperren 525
9.3.6 Semaphore 525
9.4 Interaktion mit der Programmoberfläche 527
9.4.1 Die Werkzeuge 527
9.4.2 Einzelne Steuerelemente mit Invoke aktualisieren 527
9.4.3 Mehrere Steuerelemente aktualisieren 529
9.4.4 Ist ein Invoke-Aufruf nötig? 529
9.4.5 Und was ist mit WPF? 530
9.5 Timer-Threads 531
9.6 Die BackgroundWorker-Komponente 532
9.7 Asynchrone Programmier-Entwurfsmuster 535
9.7.1 Kurzübersicht 535
9.7.2 Polling 536
9.7.3 Callback verwenden 538
9.7.4 Callback mit Parameterübergabe verwenden 539
9.7.5 Callback mit Zugriff auf die Programm-Oberfläche 540
9.8 Asynchroner Aufruf beliebiger Methoden 541
9.8.1 Die Beispielklasse 541
9.8.2 Asynchroner Aufruf ohne Callback 543
9.8.3 Asynchroner Aufruf mit Callback und Anzeigefunktion 544
9.8.4 Aufruf mit Rückgabewerten (per Eigenschaft) 545
9.8.5 Aufruf mit Rückgabewerten (per EndInvoke) 545
9.9 Es geht auch einfacher – async und await 546
9.9.1 Der Weg von Synchron zu Asynchron 547
9.9.2 Achtung: Fehlerquellen! 549
9.9.3 Eigene asynchrone Methoden entwickeln 551
9.10 Praxisbeispiele 553
9.10.1 Spieltrieb & Multithreading erleben
9.10.2 Prozess- und Thread-Informationen gewinnen 566
9.10.3 Ein externes Programm starten 571
10 Die Task Parallel Library 574
10.1 Überblick 574
10.1.1 Parallel-Programmierung 574
10.1.2 Möglichkeiten der TPL 577
10.1.3 Der CLR-Threadpool 577
10.2 Parallele Verarbeitung mit Parallel.Invoke 578
10.2.1 Aufrufvarianten 579
10.2.2 Einschränkungen 580
10.3 Verwendung von Parallel.For 580
10.3.1 Abbrechen der Verarbeitung 582
10.3.2 Auswerten des Verarbeitungsstatus 583
10.3.3 Und was ist mit anderen Iterator-Schrittweiten? 584
10.4 Collections mit Parallel.ForEach verarbeiten 584
10.5 Die Task-Klasse 585
10.5.1 Einen Task erzeugen 585
10.5.2 Den Task starten 586
10.5.3 Datenübergabe an den Task 588
10.5.4 Wie warte ich auf das Ende des Task? 589
10.5.5 Tasks mit Rückgabewerten 591
10.5.6 Die Verarbeitung abbrechen 594
10.5.7 Fehlerbehandlung 597
10.5.8 Weitere Eigenschaften 598
10.6 Zugriff auf das User-Interface 599
10.6.1 Task-Ende und Zugriff auf die Oberfläche 600
10.6.2 Zugriff auf das UI aus dem Task heraus 601
10.7 Weitere Datenstrukturen im Überblick 603
10.7.1 Threadsichere Collections 603
10.7.2 Primitive für die Threadsynchronisation 604
10.8 Parallel LINQ (PLINQ) 604
10.9 Praxisbeispiel: Spieltrieb – Version 2 605
10.9.1 Aufgabenstellung 605
10.9.2 Global-Klasse 605
10.9.3 Controller-Klasse 607
10.9.4 LKW-Klasse 608
10.9.5 Schiff-Klasse 610
10.9.6 Oberfläche 612
11 Fehlersuche und Behandlung 614
11.1 Der Debugger 614
11.1.1 Allgemeine Beschreibung 614
11.1.2 Die wichtigsten Fenster 615
11.1.3 Debugging-Optionen 618
11.1.4 Praktisches Debugging am Beispiel 620
11.2 Arbeiten mit Debug und Trace 624
11.2.1 Wichtige Methoden von Debug und Trace 624
11.2.2 Besonderheiten der Trace-Klasse 628
11.2.3 TraceListener-Objekte 628
11.3 Caller Information 631
11.3.1 Attribute 631
11.3.2 Anwendung 631
11.4 Fehlerbehandlung 632
11.4.1 Anweisungen zur Fehlerbehandlung 632
11.4.2 try-catch 633
11.4.3 try-finally 638
11.4.4 Das Standardverhalten bei Ausnahmen festlegen 640
11.4.5 Die Exception-Klasse 641
11.4.6 Fehler/Ausnahmen auslösen 642
11.4.7 Eigene Fehlerklassen 642
11.4.8 Exceptionhandling zur Entwurfszeit 644
11.4.9 Code Contracts 645
12 XML in Theorie und Praxis 646
12.1 XML – etwas Theorie 646
12.1.1 Übersicht 646
12.1.2 Der XML-Grundaufbau 649
12.1.3 Wohlgeformte Dokumente 650
12.1.4 Processing Instructions (PI) 653
12.1.5 Elemente und Attribute 653
12.1.6 Verwendbare Zeichensätze 655
12.2 XSD-Schemas 657
12.2.1 XSD-Schemas und ADO.NET 657
12.2.2 XML-Schemas in Visual Studio analysieren 659
12.2.3 XML-Datei mit XSD-Schema erzeugen 662
12.2.4 XSD-Schema aus einer XML-Datei erzeugen 663
12.3 Verwendung des DOM unter .NET 664
12.3.1 Übersicht 664
12.3.2 DOM-Integration in C# 665
12.3.3 Laden von Dokumenten 665
12.3.4 Erzeugen von XML-Dokumenten 666
12.3.5 Auslesen von XML-Dateien 668
12.3.6 Direktzugriff auf einzelne Elemente 670
12.3.7 Einfügen von Informationen 670
12.3.8 Suchen in den Baumzweigen 673
12.4 XML-Verarbeitung mit LINQ to XML 676
12.4.1 Die LINQ to XML-API 676
12.4.2 Neue XML-Dokumente erzeugen 678
12.4.3 Laden und Sichern von XML-Dokumenten 680
12.4.4 Navigieren in XML-Daten 681
12.4.5 Auswählen und Filtern 683
12.4.6 Manipulieren der XML-Daten 683
12.4.7 XML-Dokumente transformieren 685
12.5 Weitere Möglichkeiten der XML-Verarbeitung 688
12.5.1 Die relationale Sicht mit XmlDataDocument 688
12.5.2 XML-Daten aus Objektstrukturen erzeugen 691
12.5.3 Schnelles Suchen in XML-Daten mit XPathNavigator 694
12.5.4 Schnelles Auslesen von XML-Daten mit XmlReader 697
12.5.5 Erzeugen von XML-Daten mit XmlWriter 699
12.5.6 XML transformieren mit XSLT 701
12.6 Praxisbeispiele 703
12.6.1 Mit dem DOM in XML-Dokumenten navigieren 703
12.6.2 XML-Daten in eine TreeView einlesen 706
12.6.3 Ein DataSet in einen XML-String konvertieren 710
12.6.4 Ein DataSet in einer XML-Datei speichern 714
12.6.5 In Dokumenten mit dem XPathNavigator navigieren 717
13 Einführung in ADO.NET 722
13.1 Eine kleine Übersicht 722
13.1.1 Die ADO.NET-Klassenhierarchie 722
13.1.2 Die Klassen der Datenprovider 723
13.1.3 Das Zusammenspiel der ADO.NET-Klassen 726
13.2 Das Connection-Objekt 727
13.2.1 Allgemeiner Aufbau 727
13.2.2 OleDbConnection 727
13.2.3 Schließen einer Verbindung 729
13.2.4 Eigenschaften des Connection-Objekts 729
13.2.5 Methoden des Connection-Objekts 731
13.2.6 Der ConnectionStringBuilder 732
13.3 Das Command-Objekt 732
13.3.1 Erzeugen und Anwenden eines Command-Objekts 733
13.3.2 Erzeugen mittels CreateCommand-Methode 733
13.3.3 Eigenschaften des Command-Objekts 734
13.3.4 Methoden des Command-Objekts 736
13.3.5 Freigabe von Connection- und Command-Objekten 737
13.4 Parameter-Objekte 738
13.4.1 Erzeugen und Anwenden eines Parameter-Objekts 738
13.4.2 Eigenschaften des Parameter-Objekts 739
13.5 Das CommandBuilder-Objekt 740
13.5.1 Erzeugen 740
13.5.2 Anwenden 740
13.6 Das DataReader-Objekt 741
13.6.1 DataReader erzeugen 741
13.6.2 Daten lesen 742
13.6.3 Eigenschaften des DataReaders 743
13.6.4 Methoden des DataReaders 743
13.7 Das DataAdapter-Objekt 744
13.7.1 DataAdapter erzeugen 744
13.7.2 Command-Eigenschaften 745
13.7.3 Fill-Methode 746
13.7.4 Update-Methode 747
13.8 Praxisbeispiele 748
13.8.1 Wichtige ADO.NET-Objekte im Einsatz 748
13.8.2 Eine Aktionsabfrage ausführen 749
13.8.3 Eine Auswahlabfrage aufrufen 752
13.8.4 Die Datenbank aktualisieren 754
14 Das DataSet 758
14.1 Grundlegende Features des DataSets 758
14.1.1 Die Objekthierarchie 759
14.1.2 Die wichtigsten Klassen 759
14.1.3 Erzeugen eines DataSets 760
14.2 Das DataTable-Objekt 761
14.2.1 DataTable erzeugen 762
14.2.2 Spalten hinzufügen 762
14.2.3 Zeilen zur DataTable hinzufügen 763
14.2.4 Auf den Inhalt einer DataTable zugreifen 764
14.3 Die DataView 766
14.3.1 Erzeugen einer DataView 766
14.3.2 Sortieren und Filtern von Datensätzen 766
14.3.3 Suchen von Datensätzen 767
14.4 Typisierte DataSets 767
14.4.1 Ein typisiertes DataSet erzeugen 768
14.4.2 Das Konzept der Datenquellen 769
14.4.3 Typisierte DataSets und TableAdapter 770
14.5 Die Qual der Wahl 771
14.5.1 DataReader – der schnelle Lesezugriff 772
14.5.2 DataSet – die Datenbank im Hauptspeicher 772
14.5.3 Objektrelationales Mapping – die Zukunft? 773
14.6 Praxisbeispiele 774
14.6.1 In der DataView sortieren und filtern 774
14.6.2 Suche nach Datensätzen 776
14.6.3 Ein DataSet in einen XML-String serialisieren 777
14.6.4 Untypisiertes in ein typisiertes DataSet konvertieren 782
14.6.5 Eine LINQ to SQL-Abfrage ausführen 787
15 Verteilen von Anwendungen 792
15.1 ClickOnce-Deployment 793
15.1.1 Übersicht/Einschränkungen 793
15.1.2 Die Vorgehensweise 794
15.1.3 Ort der Veröffentlichung 794
15.1.4 Anwendungsdateien 795
15.1.5 Erforderliche Komponenten 795
15.1.6 Aktualisierungen 796
15.1.7 Veröffentlichungsoptionen 797
15.1.8 Veröffentlichen 798
15.1.9 Verzeichnisstruktur 798
15.1.10 Der Webpublishing-Assistent 800
15.1.11 Neue Versionen erstellen 801
15.2 InstallShield 801
15.2.1 Installation 801
15.2.2 Aktivieren 802
15.2.3 Ein neues Setup-Projekt 802
15.2.4 Finaler Test 810
15.3 Hilfedateien programmieren 810
15.3.1 Der HTML Help Workshop 811
15.3.2 Bedienung am Beispiel 812
15.3.3 Hilfedateien in die Visual C#-Anwendung einbinden 814
15.3.4 Eine alternative Hilfe-IDE verwenden 818
16 Weitere Techniken 820
16.1 Zugriff auf die Zwischenablage 820
16.1.1 Das Clipboard-Objekt 820
16.1.2 Zwischenablage-Funktionen für Textboxen 822
16.2 Arbeiten mit der Registry 822
16.2.1 Allgemeines 823
16.2.2 Registry-Unterstützung in .NET 825
16.3 .NET-Reflection 826
16.3.1 Übersicht 826
16.3.2 Assembly laden 826
16.3.3 Mittels GetType und Type Informationen sammeln 827
16.3.4 Dynamisches Laden von Assemblies 829
16.4 Praxisbeispiele 832
16.4.1 Zugriff auf die Registry 832
16.4.2 Dateiverknüpfungen erzeugen 834
16.4.3 Betrachter für Manifestressourcen 836
16.4.4 Die Zwischenablage überwachen und anzeigen 839
16.4.5 Die WIA-Library kennenlernen 842
16.4.6 Auf eine Webcam zugreifen 854
16.4.7 Auf den Scanner zugreifen 856
16.4.8 OpenOffice.org Writer per OLE steuern 861
16.4.9 Nutzer und Gruppen des aktuellen Systems ermitteln 869
16.4.10 Testen, ob Nutzer in einer Gruppe enthalten ist 870
16.4.11 Testen, ob der Nutzer ein Administrator ist 872
16.4.12 Die IP-Adressen des Computers bestimmen 873
16.4.13 Die IP-Adresse über den Hostnamen bestimmen 874
16.4.14 Diverse Systeminformationen ermitteln 875
16.4.15 Environment Variablen auslesen 879
16.4.16 Alles über den Bildschirm erfahren 883
16.4.17 Sound per MCI aufnehmen 884
16.4.18 Mikrofonpegel anzeigen 888
16.4.19 Pegeldiagramm aufzeichnen 889
16.4.20 Sound-und Video-Dateien per MCI abspielen 893
17 Konsolenanwendungen 902
17.1 Grundaufbau/Konzepte 902
17.1.1 Unser Hauptprogramm – Program.cs 903
17.1.2 Rückgabe eines Fehlerstatus 904
17.1.3 Parameterübergabe 905
17.1.4 Zugriff auf die Umgebungsvariablen 906
17.2 Die Kommandozentrale: System.Console 907
17.2.1 Eigenschaften 908
17.2.2 Methoden/Ereignisse 908
17.2.3 Textausgaben 909
17.2.4 Farbangaben 910
17.2.5 Tastaturabfragen 911
17.2.6 Arbeiten mit Streamdaten 912
17.3 Praxisbeispiel 914
17.3.1 Farbige Konsolenanwendung 914
17.3.2 Weitere Hinweise und Beispiele 916
Teil III: Windows Apps 918
18 Erste Schritte 920
18.1 Grundkonzepte und Begriffe 920
18.1.1 Windows Runtime (WinRT) 920
18.1.2 Windows Apps 921
18.1.3 Fast and Fluid 922
18.1.4 Process Sandboxing und Contracts 923
18.1.5 .NET WinRT-Profil 925
18.1.6 Language Projection 925
18.1.7 Vollbildmodus – War da was? 927
18.1.8 Windows Store 927
18.1.9 Zielplattformen 928
18.2 Entwurfsumgebung 929
18.2.1 Betriebssystem 929
18.2.2 Windows-Simulator 929
18.2.3 Remote-Debugging 932
18.3 Ein (kleines) Einstiegsbeispiel 933
18.3.1 Aufgabenstellung 933
18.3.2 Quellcode 933
18.3.3 Oberflächenentwurf 936
18.3.4 Installation und Test 938
18.3.5 Touchscreen 940
18.3.6 Fazit 940
18.4 Weitere Details zu WinRT 942
18.4.1 Wo ist WinRT einzuordnen? 943
18.4.2 Die WinRT-API 944
18.4.3 Wichtige WinRT-Namespaces 946
18.4.4 Der Unterbau 947
18.5 Praxisbeispiel 949
18.5.1 WinRT in Desktop-Applikationen nutzen 949
19 App-Oberflächen entwerfen 954
19.1 Grundkonzepte 954
19.1.1 XAML (oder HTML 5) für die Oberfläche 955
19.1.2 Die Page, der Frame und das Window 956
19.1.3 Das Befehlsdesign 958
19.1.4 Die Navigationsdesigns 960
19.1.5 Achtung: Fingereingabe! 961
19.1.6 Verwendung von Schriftarten 961
19.2 Seitenauswahl und -navigation 962
19.2.1 Die Startseite festlegen 962
19.2.2 Navigation und Parameterübergabe 962
19.2.3 Den Seitenstatus erhalten 963
19.3 App-Darstellung 964
19.3.1 Vollbild quer und hochkant 964
19.3.2 Was ist mit Andocken und Füllmodus? 965
19.3.3 Reagieren auf die Änderung 965
19.4 Skalieren von Apps 967
19.5 Praxisbeispiele 970
19.5.1 Seitennavigation und Parameterübergabe 970
19.5.2 Die Fensterkopfzeile anpassen 972
20 Die wichtigsten Controls 974
20.1 Einfache WinRT-Controls 974
20.1.1 TextBlock, RichTextBlock 974
20.1.2 Button, HyperlinkButton, RepeatButton 977
20.1.3 CheckBox, RadioButton, ToggleButton, ToggleSwitch 979
20.1.4 TextBox, PasswordBox, RichEditBox 980
20.1.5 Image 984
20.1.6 ScrollBar, Slider, ProgressBar, ProgressRing 986
20.1.7 Border, Ellipse, Rectangle 987
20.2 Layout-Controls 988
20.2.1 Canvas 988
20.2.2 StackPanel 989
20.2.3 ScrollViewer 989
20.2.4 Grid 990
20.2.5 VariableSizedWrapGrid 991
20.2.6 SplitView 992
20.2.7 Pivot 996
20.2.8 RelativPanel 998
20.3 Listendarstellungen 1000
20.3.1 ComboBox, ListBox 1000
20.3.2 ListView 1004
20.3.3 GridView 1005
20.3.4 FlipView 1007
20.4 Sonstige Controls 1009
20.4.1 CaptureElement 1009
20.4.2 MediaElement 1011
20.4.3 Frame 1012
20.4.4 WebView 1012
20.4.5 ToolTip 1013
20.4.6 CalendarDatePicker 1015
20.4.7 DatePicker/TimePicker 1016
20.5 Praxisbeispiele 1016
20.5.1 Einen StringFormat-Konverter implementieren 1016
20.5.2 Besonderheiten der TextBox kennen lernen 1018
20.5.3 Daten in der GridView gruppieren 1022
20.5.4 Das SemanticZoom-Control verwenden 1026
20.5.5 Die CollectionViewSource verwenden 1031
20.5.6 Zusammenspiel ListBox/AppBar 1034
21 Apps im Detail 1038
21.1 Ein Windows App-Projekt im Detail 1038
21.1.1 Contracts und Extensions 1039
21.1.2 AssemblyInfo.cs 1039
21.1.3 Verweise 1041
21.1.4 App.xaml und App.xaml.cs 1041
21.1.5 Package.appxmanifest 1042
21.1.6 Application1_TemporaryKey.pfx 1047
21.1.7 MainPage.xaml & MainPage.xaml.cs
21.1.8 Assets/Symbole 1048
21.1.9 Nach dem Kompilieren 1048
21.2 Der Lebenszyklus einer Windows App 1048
21.2.1 Möglichkeiten der Aktivierung von Apps 1050
21.2.2 Der Splash Screen 1052
21.2.3 Suspending 1052
21.2.4 Resuming 1054
21.2.5 Beenden von Apps 1054
21.2.6 Die Ausnahmen von der Regel 1055
21.2.7 Debuggen 1055
21.3 Daten speichern und laden 1059
21.3.1 Grundsätzliche Überlegungen 1059
21.3.2 Worauf und wie kann ich zugreifen? 1059
21.3.3 Das AppData-Verzeichnis 1060
21.3.4 Das Anwendungs-Installationsverzeichnis 1062
21.3.5 Das Downloads-Verzeichnis 1063
21.3.6 Sonstige Verzeichnisse 1064
21.3.7 Anwendungsdaten lokal sichern und laden 1064
21.3.8 Daten in der Cloud ablegen/laden (Roaming) 1066
21.3.9 Aufräumen 1068
21.3.10 Sensible Informationen speichern 1069
21.4 Praxisbeispiele 1070
21.4.1 Die Auto-Play-Funktion unterstützen 1070
21.4.2 Einen zusätzlichen Splash Screen einsetzen 1074
21.4.3 Eine Dateiverknüpfung erstellen 1076
22 App-Techniken 1082
22.1 Arbeiten mit Dateien/Verzeichnissen 1082
22.1.1 Verzeichnisinformationen auflisten 1082
22.1.2 Unterverzeichnisse auflisten 1085
22.1.3 Verzeichnisse erstellen/löschen 1086
22.1.4 Dateien auflisten 1088
22.1.5 Dateien erstellen/schreiben/lesen 1090
22.1.6 Dateien kopieren/umbenennen/löschen 1094
22.1.7 Verwenden der Dateipicker 1095
22.1.8 StorageFile-/StorageFolder-Objekte speichern 1100
22.1.9 Verwenden der Most Recently Used-Liste 1102
22.2 Datenaustausch zwischen Apps/Programmen 1103
22.2.1 Zwischenablage 1103
22.2.2 Teilen von Inhalten 1110
22.2.3 Eine App als Freigabeziel verwenden 1114
22.2.4 Zugriff auf die Kontaktliste 1115
22.3 Spezielle Oberflächenelemente 1116
22.3.1 MessageDialog 1117
22.3.2 ContentDialog 1120
22.3.3 Popup-Benachrichtigungen 1122
22.3.4 PopUp/Flyouts 1130
22.3.5 Das PopupMenu einsetzen 1133
22.3.6 Eine AppBar/CommandBar verwenden 1134
22.4 Datenbanken und Windows Store Apps 1138
22.4.1 Der Retter in der Not: SQLite! 1138
22.4.2 Verwendung/Kurzüberblick 1139
22.4.3 Installation 1140
22.4.4 Wie kommen wir zu einer neuen Datenbank? 1141
22.4.5 Wie werden die Daten manipuliert? 1145
22.5 Vertrieb der App 1147
22.5.1 Verpacken der App 1147
22.5.2 App-Installation per Skript 1149
22.6 Ein Blick auf die App-Schwachstellen 1150
22.6.1 Quellcodes im Installationsverzeichnis 1150
22.6.2 Zugriff auf den App-Datenordner 1152
22.7 Praxisbeispiele 1153
22.7.1 Ein Verzeichnis auf Änderungen überwachen 1153
22.7.2 Eine App als Freigabeziel verwenden 1155
22.7.3 ToastNotifications einfach erzeugen 1160
Anhang 1166
A Glossar 1168
B Wichtige Dateiextensions 1174
Index 1176
Download-Kapitel 30
Erscheint lt. Verlag | 7.9.2015 |
---|---|
Verlagsort | München |
Sprache | deutsch |
Themenwelt | Informatik ► Programmiersprachen / -werkzeuge ► C# |
Schlagworte | ADO.NET • App-Programmierung • Grafikprogrammierung • LINQ • .NET 5.0 • OOP • Visual Studio 2015 • WinRT • WPF |
ISBN-10 | 3-446-44606-0 / 3446446060 |
ISBN-13 | 978-3-446-44606-9 / 9783446446069 |
Haben Sie eine Frage zum Produkt? |
Größe: 17,8 MB
DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasserzeichen und ist damit für Sie personalisiert. Bei einer missbräuchlichen Weitergabe des eBooks an Dritte ist eine Rückverfolgung an die Quelle möglich.
Dateiformat: PDF (Portable Document Format)
Mit einem festen Seitenlayout eignet sich die PDF besonders für Fachbücher mit Spalten, Tabellen und Abbildungen. Eine PDF kann auf fast allen Geräten angezeigt werden, ist aber für kleine Displays (Smartphone, eReader) nur eingeschränkt geeignet.
Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.
Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.
Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.
aus dem Bereich