Visual C# 2015 - Grundlagen, Profiwissen und Rezepte

Walter Doberenz, Thomas Gewinnus

Visual C# 2015 - Grundlagen, Profiwissen und Rezepte

2015

1195 Seiten

Format: PDF, Online Lesen

E-Book: €  49,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446446069

 

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

 

© 2009-2024 ciando GmbH