Suchen und Finden
Service
Visual C# 2015 - Grundlagen, Profiwissen und Rezepte
Walter Doberenz, Thomas Gewinnus
Verlag Carl Hanser Fachbuchverlag, 2015
ISBN 9783446446069 , 1195 Seiten
Format PDF, OL
Kopierschutz Wasserzeichen
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<>
366
5.8.4 SortedSet<>
367
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
553
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
1047
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