Visual C# 2017 - Grundlagen, Profiwissen und Rezepte

W. Doberenz, T. Gewinnus, J. Kotz, W. Saumweber

Visual C# 2017 - Grundlagen, Profiwissen und Rezepte

Visual C# 2017 - Grundlagen, Profiwissen und Rezepte

2018

951 Seiten

Format: PDF, ePUB

E-Book: €  39,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446456761

 

Inhalt

7

Vorwort

23

TEIL I: Grundlagen

27

1 Einstieg in Visual Studio 2017

29

1.1 Die Installation von Visual Studio 2017

29

1.1.1 Überblick über die Produktpalette

29

1.1.2 Anforderungen an Hard- und Software

30

1.2 Unser allererstes C#-Programm

31

1.2.1 Vorbereitungen

31

1.2.2 Quellcode schreiben

33

1.2.3 Programm kompilieren und testen

33

1.2.4 Einige Erläuterungen zum Quellcode

34

1.2.5 Konsolenanwendungen sind out

35

1.3 Die Windows-Philosophie

36

1.3.1 Mensch-Rechner-Dialog

36

1.3.2 Objekt- und ereignisorientierte Programmierung

36

1.3.3 Programmieren mit Visual Studio 2017

38

1.4 Die Entwicklungsumgebung Visual Studio 2017

39

1.4.1 Neues Projekt

39

1.4.2 Die wichtigsten Fenster

40

1.5 Microsofts .NET-Technologie

44

1.5.1 Zur Geschichte von .NET

44

1.5.2 .NET-Features und Begriffe

46

1.6 Praxisbeispiele

54

1.6.1 Unsere erste Windows-Forms-Anwendung

54

1.6.2 Umrechnung Euro-Dollar

58

2 Grundlagen der Sprache C#

67

2.1 Grundbegriffe

67

2.1.1 Anweisungen

67

2.1.2 Bezeichner

68

2.1.3 Schlüsselwörter

69

2.1.4 Kommentare

70

2.2 Datentypen, Variablen und Konstanten

71

2.2.1 Fundamentale Typen

71

2.2.2 Wertetypen versus Verweistypen

72

2.2.3 Benennung von Variablen

73

2.2.4 Deklaration von Variablen

73

2.2.5 Typsuffixe

75

2.2.6 Zeichen und Zeichenketten

75

2.2.7 object-Datentyp

78

2.2.8 Konstanten deklarieren

79

2.2.9 Nullable Types

79

2.2.10 Typinferenz

80

2.2.11 Gültigkeitsbereiche und Sichtbarkeit

81

2.3 Konvertieren von Datentypen

82

2.3.1 Implizite und explizite Konvertierung

82

2.3.2 Welcher Datentyp passt zu welchem?

84

2.3.3 Konvertieren von string

84

2.3.4 Die Convert-Klasse

87

2.3.5 Die Parse-Methode

87

2.3.6 Boxing und Unboxing

88

2.4 Operatoren

89

2.4.1 Arithmetische Operatoren

90

2.4.2 Zuweisungsoperatoren

92

2.4.3 Logische Operatoren

93

2.4.4 Rangfolge der Operatoren

95

2.5 Kontrollstrukturen

97

2.5.1 Verzweigungsbefehle

97

2.5.2 Schleifenanweisungen

100

2.6 Benutzerdefinierte Datentypen

103

2.6.1 Enumerationen

103

2.6.2 Strukturen

105

2.7 Nutzerdefinierte Methoden

107

2.7.1 Methoden mit Rückgabewert

108

2.7.2 Methoden ohne Rückgabewert

109

2.7.3 Parameterübergabe mit ref

110

2.7.4 Parameterübergabe mit out

111

2.7.5 Methodenüberladung

112

2.7.6 Optionale Parameter

113

2.7.7 Benannte Parameter

115

2.8 Praxisbeispiele

116

2.8.1 Vom PAP zur Konsolenanwendung

116

2.8.2 Ein Konsolen- in ein Windows-Programm verwandeln

118

2.8.3 Schleifenanweisungen verstehen

120

2.8.4 Benutzerdefinierte Methoden überladen

122

2.8.5 Anwendungen von Visual Basic nach C# portieren

125

3 OOP-Konzepte

133

3.1 Kleine Einführung in die OOP

133

3.1.1 Historische Entwicklung

134

3.1.2 Grundbegriffe der OOP

135

3.1.3 Sichtbarkeit von Klassen und ihren Mitgliedern

137

3.1.4 Allgemeiner Aufbau einer Klasse

138

3.1.5 Das Erzeugen eines Objekts

140

3.1.6 Einführungsbeispiel

143

3.2 Eigenschaften

147

3.2.1 Eigenschaften mit Zugriffsmethoden kapseln

147

3.2.2 Berechnete Eigenschaften

149

3.2.3 Lese-/Schreibschutz

151

3.2.4 Property-Accessoren

152

3.2.5 Statische Felder/Eigenschaften

152

3.2.6 Einfache Eigenschaften automatisch implementieren

155

3.3 Methoden

156

3.3.1 Öffentliche und private Methoden

156

3.3.2 Überladene Methoden

157

3.3.3 Statische Methoden

158

3.4 Ereignisse

160

3.4.1 Ereignis hinzufügen

160

3.4.2 Ereignis verwenden

163

3.5 Arbeiten mit Konstruktor und Destruktor

166

3.5.1 Konstruktor und Objektinitialisierer

167

3.5.2 Destruktor und Garbage Collector

170

3.5.3 Mit using den Lebenszyklus des Objekts kapseln

172

3.5.4 Verzögerte Initialisierung

173

3.6 Vererbung und Polymorphie

174

3.6.1 Klassendiagramm

174

3.6.2 Method-Overriding

175

3.6.3 Klassen implementieren

175

3.6.4 Implementieren der Objekte

179

3.6.5 Ausblenden von Mitgliedern durch Vererbung

180

3.6.6 Allgemeine Hinweise und Regeln zur Vererbung

182

3.6.7 Polymorphes Verhalten

183

3.6.8 Die Rolle von System.Object

186

3.7 Spezielle Klassen

187

3.7.1 Abstrakte Klassen

187

3.7.2 Versiegelte Klassen

189

3.7.3 Partielle Klassen

189

3.7.4 Statische Klassen

191

3.8 Schnittstellen (Interfaces)

191

3.8.1 Definition einer Schnittstelle

192

3.8.2 Implementieren einer Schnittstelle

192

3.8.3 Abfragen, ob Schnittstelle vorhanden ist

193

3.8.4 Mehrere Schnittstellen implementieren

194

3.8.5 Schnittstellenprogrammierung ist ein weites Feld ...

194

3.9 Praxisbeispiele

195

3.9.1 Eigenschaften sinnvoll kapseln

195

3.9.2 Eine statische Klasse anwenden

198

3.9.3 Vom fetten zum schlanken Client

200

3.9.4 Schnittstellenvererbung verstehen

210

3.9.5 Rechner für komplexe Zahlen

215

3.9.6 Sortieren mit IComparable/IComparer

224

3.9.7 Einen Objektbaum in generischen Listen abspeichern

228

3.9.8 OOP beim Kartenspiel erlernen

234

3.9.9 Eine Klasse zur Matrizenrechnung entwickeln

239

4 Arrays, Strings, Funktionen

245

4.1 Datenfelder (Arrays)

245

4.1.1 Array deklarieren

246

4.1.2 Array instanziieren

246

4.1.3 Array initialisieren

247

4.1.4 Zugriff auf Array-Elemente

248

4.1.5 Zugriff mittels Schleife

249

4.1.6 Mehrdimensionale Arrays

250

4.1.7 Zuweisen von Arrays

252

4.1.8 Arrays aus Strukturvariablen

253

4.1.9 Löschen und Umdimensionieren von Arrays

254

4.1.10 Eigenschaften und Methoden von Arrays

255

4.1.11 Übergabe von Arrays

257

4.2 Verarbeiten von Zeichenketten

258

4.2.1 Zuweisen von Strings

258

4.2.2 Eigenschaften und Methoden von String-Variablen

259

4.2.3 Wichtige Methoden der String-Klasse

262

4.2.4 Die StringBuilder-Klasse

264

4.3 Reguläre Ausdrücke

267

4.3.1 Wozu werden reguläre Ausdrücke verwendet?

267

4.3.2 Eine kleine Einführung

267

4.3.3 Wichtige Methoden/Eigenschaften der Klasse Regex

268

4.3.4 Kompilierte reguläre Ausdrücke

270

4.3.5 RegexOptions-Enumeration

271

4.3.6 Metazeichen (Escape-Zeichen)

272

4.3.7 Zeichenmengen (Character Sets)

273

4.3.8 Quantifizierer

275

4.3.9 Zero-Width Assertions

276

4.3.10 Gruppen

280

4.3.11 Text ersetzen

280

4.3.12 Text splitten

281

4.4 Datums- und Zeitberechnungen

282

4.4.1 Die DateTime-Struktur

282

4.4.2 Wichtige Eigenschaften von DateTime-Variablen

284

4.4.3 Wichtige Methoden von DateTime-Variablen

284

4.4.4 Wichtige Mitglieder der DateTime-Struktur

285

4.4.5 Konvertieren von Datumstrings in DateTime-Werte

286

4.4.6 Die TimeSpan-Struktur

287

4.5 Mathematische Funktionen

289

4.5.1 Überblick

289

4.5.2 Zahlen runden

289

4.5.3 Winkel umrechnen

290

4.5.4 Potenz- und Wurzeloperationen

290

4.5.5 Logarithmus und Exponentialfunktionen

290

4.5.6 Zufallszahlen erzeugen

291

4.6 Zahlen- und Datumsformatierungen

292

4.6.1 Anwenden der ToString-Methode

292

4.6.2 Anwenden der Format-Methode

294

4.6.3 Stringinterpolation

295

4.7 Praxisbeispiele

296

4.7.1 Zeichenketten verarbeiten

296

4.7.2 Zeichenketten mit StringBuilder addieren

299

4.7.3 Reguläre Ausdrücke testen

303

4.7.4 Methodenaufrufe mit Array-Parametern

304

5 Weitere Sprachfeatures

309

5.1 Namespaces (Namensräume)

309

5.1.1 Ein kleiner Überblick

309

5.1.2 Einen eigenen Namespace einrichten

310

5.1.3 Die using-Anweisung

311

5.1.4 Namespace Alias

312

5.2 Operatorenüberladung

313

5.2.1 Syntaxregeln

313

5.2.2 Praktische Anwendung

313

5.3 Collections (Auflistungen)

314

5.3.1 Die Schnittstelle IEnumerable

315

5.3.2 ArrayList

317

5.3.3 Hashtable

319

5.3.4 Indexer

319

5.4 Generics

322

5.4.1 Klassische Vorgehensweise

322

5.4.2 Generics bieten Typsicherheit

324

5.4.3 Generische Methoden

325

5.4.4 Iteratoren

326

5.5 Generische Collections

327

5.5.1 List-Collection statt ArrayList

327

5.5.2 Vorteile generischer Collections

328

5.5.3 Constraints

328

5.6 Das Prinzip der Delegates

329

5.6.1 Delegates sind Methodenzeiger

329

5.6.2 Einen Delegate-Typ deklarieren

329

5.6.3 Ein Delegate-Objekt erzeugen

330

5.6.4 Delegates vereinfacht instanziieren

332

5.6.5 Anonyme Methoden

332

5.6.6 Lambda-Ausdrücke

334

5.6.7 Lambda-Ausdrücke in der Task Parallel Library

336

5.7 Dynamische Programmierung

338

5.7.1 Wozu dynamische Programmierung?

338

5.7.2 Das Prinzip der dynamischen Programmierung

338

5.7.3 Optionale Parameter sind hilfreich

341

5.7.4 Kovarianz und Kontravarianz

342

5.8 Weitere Datentypen

343

5.8.1 BigInteger

343

5.8.2 Complex

345

5.8.3 Tuple<>

346

5.8.4 SortedSet<>

347

5.9 Praxisbeispiele

348

5.9.1 ArrayList versus generische List

348

5.9.2 Generische IEnumerable-Interfaces implementieren

351

5.9.3 Delegates, anonyme Methoden, Lambda Expressions

355

5.9.4 Dynamischer Zugriff auf COM Interop

359

6 Einführung in LINQ

363

6.1 LINQ-Grundlagen

363

6.1.1 Die LINQ-Architektur

363

6.1.2 Anonyme Typen

365

6.1.3 Erweiterungsmethoden

366

6.2 Abfragen mit LINQ to Objects

367

6.2.1 Grundlegendes zur LINQ-Syntax

368

6.2.2 Zwei alternative Schreibweisen von LINQ-Abfragen

369

6.2.3 Übersicht der wichtigsten Abfrageoperatoren

370

6.3 LINQ-Abfragen im Detail

371

6.3.1 Die Projektionsoperatoren Select und SelectMany

372

6.3.2 Der Restriktionsoperator Where

374

6.3.3 Die Sortierungsoperatoren OrderBy und ThenBy

374

6.3.4 Der Gruppierungsoperator GroupBy

376

6.3.5 Verknüpfen mit Join

378

6.3.6 Aggregat-Operatoren

379

6.3.7 Verzögertes Ausführen von LINQ-Abfragen

381

6.3.8 Konvertierungsmethoden

382

6.3.9 Abfragen mit PLINQ

383

6.4 Praxisbeispiele

386

6.4.1 Die Syntax von LINQ-Abfragen verstehen

386

6.4.2 Aggregat-Abfragen mit LINQ

389

6.4.3 LINQ im Schnelldurchgang erlernen

391

6.4.4 Strings mit LINQ abfragen und filtern

394

6.4.5 Duplikate aus einer Liste oder einem Array entfernen

395

6.4.6 Arrays mit LINQ initialisieren

398

6.4.7 Arrays per LINQ mit Zufallszahlen füllen

400

6.4.8 Einen String mit Wiederholmuster erzeugen

402

6.4.9 Mit LINQ Zahlen und Strings sortieren

403

6.4.10 Mit LINQ Collections von Objekten sortieren

404

6.4.11 Ergebnisse von LINQ-Abfragen in ein Array kopieren

407

7 C#-Sprachneuerungen im Überblick

409

7.1 C# 4.0 – Visual Studio 2010

409

7.1.1 Datentyp dynamic

409

7.1.2 Benannte und optionale Parameter

410

7.1.3 Covarianz und Contravarianz

412

7.2 C# 5.0 – Visual Studio 2012

412

7.2.1 Async und Await

412

7.2.2 CallerInfo

412

7.3 Visual Studio 2013

413

7.4 C# 6.0 – Visual Studio 2015

413

7.4.1 String Interpolation

413

7.4.2 Schreibgeschützte AutoProperties

413

7.4.3 Initialisierer für AutoProperties

414

7.4.4 Expression Body Funktionsmember

414

7.4.5 using static

414

7.4.6 Bedingter Nulloperator

415

7.4.7 Ausnahmenfilter

415

7.4.8 nameof-Ausdrücke

416

7.4.9 await in catch und finally

416

7.4.10 Indexinitialisierer

416

7.5 C# 7.0 – Visual Studio 2017

417

7.5.1 out-Variablen

417

7.5.2 Tupel

417

7.5.3 Mustervergleich

418

7.5.4 Discards

420

7.5.5 Lokale ref-Variablen und Rückgabetypen

420

7.5.6 Lokale Funktionen

420

7.5.7 Mehr Expression-Bodied Member

420

7.5.8 throw-Ausdrücke

421

7.5.9 Verbesserung der numerischen literalen Syntax

421

Teil II: Technologien

423

8 Zugriff auf das Dateisystem

425

8.1 Grundlagen

425

8.1.1 Klassen für den Zugriff auf das Dateisystem

426

8.1.2 Statische versus Instanzen-Klasse

426

8.2 Übersichten

427

8.2.1 Methoden der Directory-Klasse

428

8.2.2 Methoden eines DirectoryInfo-Objekts

428

8.2.3 Eigenschaften eines DirectoryInfo-Objekts

428

8.2.4 Methoden der File-Klasse

429

8.2.5 Methoden eines FileInfo-Objekts

430

8.2.6 Eigenschaften eines FileInfo-Objekts

430

8.3 Operationen auf Verzeichnisebene

431

8.3.1 Existenz eines Verzeichnisses/einer Datei feststellen

431

8.3.2 Verzeichnisse erzeugen und löschen

431

8.3.3 Verzeichnisse verschieben und umbenennen

432

8.3.4 Aktuelles Verzeichnis bestimmen

432

8.3.5 Unterverzeichnisse ermitteln

433

8.3.6 Alle Laufwerke ermitteln

433

8.3.7 Dateien kopieren und verschieben

434

8.3.8 Dateien umbenennen

435

8.3.9 Dateiattribute feststellen

435

8.3.10 Verzeichnis einer Datei ermitteln

437

8.3.11 Alle im Verzeichnis enthaltenen Dateien ermitteln

437

8.3.12 Dateien und Unterverzeichnisse ermitteln

438

8.4 Zugriffsberechtigungen

439

8.4.1 ACL und ACE

439

8.4.2 SetAccessControl-Methode

439

8.4.3 Zugriffsrechte anzeigen

440

8.5 Weitere wichtige Klassen

441

8.5.1 Die Path-Klasse

441

8.5.2 Die Klasse FileSystemWatcher

442

8.5.3 Die Klasse ZipArchive

443

8.6 Datei- und Verzeichnisdialoge

445

8.6.1 OpenFileDialog und SaveFileDialog

445

8.6.2 FolderBrowserDialog

447

8.7 Praxisbeispiele

448

8.7.1 Infos über Verzeichnisse und Dateien gewinnen

448

8.7.2 Eine Verzeichnisstruktur in die TreeView einlesen

451

8.7.3 Mit LINQ und RegEx Verzeichnisbäume durchsuchen

454

9 Dateien lesen und schreiben

459

9.1 Grundprinzip der Datenpersistenz

459

9.1.1 Dateien und Streams

459

9.1.2 Die wichtigsten Klassen

460

9.1.3 Erzeugen eines Streams

461

9.2 Dateiparameter

461

9.2.1 FileAccess

461

9.2.2 FileMode

462

9.2.3 FileShare

462

9.3 Textdateien

463

9.3.1 Eine Textdatei beschreiben bzw. neu anlegen

463

9.3.2 Eine Textdatei lesen

464

9.4 Binärdateien

466

9.4.1 Lese-/Schreibzugriff

466

9.4.2 Die Methoden ReadAllBytes und WriteAllBytes

467

9.4.3 Erzeugen von BinaryReader/BinaryWriter

467

9.5 Sequenzielle Dateien

468

9.5.1 Lesen und Schreiben von strukturierten Daten

468

9.5.2 Serialisieren von Objekten

469

9.6 Dateien verschlüsseln und komprimieren

470

9.6.1 Das Methodenpärchen Encrypt/Decrypt

470

9.6.2 Verschlüsseln unter Windows Vista/7/8/10

471

9.6.3 Verschlüsseln mit der CryptoStream-Klasse

472

9.6.4 Dateien komprimieren

473

9.7 Memory Mapped Files

474

9.7.1 Grundprinzip

474

9.7.2 Erzeugen eines MMF

475

9.7.3 Erstellen eines Map View

475

9.8 Praxisbeispiele

476

9.8.1 Auf eine Textdatei zugreifen

476

9.8.2 Einen Objektbaum persistent speichern

480

9.8.3 Ein Memory Mapped File (MMF) verwenden

487

9.8.4 Hex-Dezimal-Bytes-Konverter

489

9.8.5 Eine Datei verschlüsseln

493

9.8.6 Eine Datei komprimieren

496

9.8.7 PDFs erstellen/exportieren

498

9.8.8 Eine CSV-Datei erstellen

501

9.8.9 Eine CSV-Datei mit LINQ lesen und auswerten

504

9.8.10 Einen korrekten Dateinamen erzeugen

506

10 Asynchrone Programmierung

507

10.1 Übersicht

507

10.1.1 Multitasking versus Multithreading

508

10.1.2 Deadlocks

509

10.1.3 Racing

510

10.2 Programmieren mit Threads

511

10.2.1 Einführungsbeispiel

512

10.2.2 Wichtige Thread-Methoden

513

10.2.3 Wichtige Thread-Eigenschaften

515

10.2.4 Einsatz der ThreadPool-Klasse

516

10.3 Sperrmechanismen

518

10.3.1 Threading ohne lock

518

10.3.2 Threading mit lock

520

10.3.3 Die Monitor-Klasse

522

10.3.4 Mutex

526

10.3.5 Methoden für die parallele Ausführung sperren

527

10.3.6 Semaphore

528

10.4 Interaktion mit der Programmoberfläche

529

10.4.1 Die Werkzeuge

530

10.4.2 Einzelne Steuerelemente mit Invoke aktualisieren

530

10.4.3 Mehrere Steuerelemente aktualisieren

532

10.4.4 Ist ein Invoke-Aufruf nötig?

532

10.4.5 Und was ist mit WPF?

533

10.5 Timer-Threads

535

10.6 Die BackgroundWorker-Komponente

536

10.7 Asynchrone Programmierentwurfsmuster

538

10.7.1 Kurzübersicht

539

10.7.2 Polling

540

10.7.3 Callback verwenden

542

10.7.4 Callback mit Parameterübergabe verwenden

542

10.7.5 Callback mit Zugriff auf die Programmoberfläche

544

10.8 Asynchroner Aufruf beliebiger Methoden

545

10.8.1 Die Beispielklasse

545

10.8.2 Asynchroner Aufruf ohne Callback

546

10.8.3 Asynchroner Aufruf mit Callback und Anzeigefunktion

547

10.8.4 Aufruf mit Rückgabewerten (per Eigenschaft)

548

10.8.5 Aufruf mit Rückgabewerten (per EndInvoke)

549

10.9 Es geht auch einfacher – async und await

550

10.9.1 Der Weg von synchron zu asynchron

550

10.9.2 Achtung: Fehlerquellen!

552

10.9.3 Eigene asynchrone Methoden entwickeln

554

10.10 Praxisbeispiele

557

10.10.1 Spieltrieb & Multithreading erleben

557

10.10.2 Prozess- und Thread-Informationen gewinnen

570

10.10.3 Ein externes Programm starten

575

11 Die Task Parallel Library

579

11.1 Überblick

579

11.1.1 Parallel-Programmierung

579

11.1.2 Möglichkeiten der TPL

582

11.1.3 Der CLR-Threadpool

582

11.2 Parallele Verarbeitung mit Parallel.Invoke

583

11.2.1 Aufrufvarianten

584

11.2.2 Einschränkungen

585

11.3 Verwendung von Parallel.For

585

11.3.1 Abbrechen der Verarbeitung

587

11.3.2 Auswerten des Verarbeitungsstatus

588

11.3.3 Und was ist mit anderen Iterator-Schrittweiten?

589

11.4 Collections mit Parallel.ForEach verarbeiten

590

11.5 Die Task-Klasse

591

11.5.1 Einen Task erzeugen

591

11.5.2 Den Task starten

592

11.5.3 Datenübergabe an den Task

594

11.5.4 Wie warte ich auf das Ende des Task?

595

11.5.5 Tasks mit Rückgabewerten

597

11.5.6 Die Verarbeitung abbrechen

600

11.5.7 Fehlerbehandlung

604

11.5.8 Weitere Eigenschaften

605

11.6 Zugriff auf das User-Interface

606

11.6.1 Task-Ende und Zugriff auf die Oberfläche

606

11.6.2 Zugriff auf das UI aus dem Task heraus

608

11.7 Weitere Datenstrukturen im Überblick

610

11.7.1 Threadsichere Collections

610

11.7.2 Primitive für die Threadsynchronisation

611

11.8 Parallel LINQ (PLINQ)

611

11.9 Praxisbeispiel: Spieltrieb – Version 2

611

11.9.1 Aufgabenstellung

612

11.9.2 Global-Klasse

612

11.9.3 Controller-Klasse

613

11.9.4 LKW-Klasse

615

11.9.5 Schiff-Klasse

616

11.9.6 Oberfläche

619

12 Fehlersuche und Behandlung

621

12.1 Der Debugger

621

12.1.1 Allgemeine Beschreibung

621

12.1.2 Die wichtigsten Fenster

622

12.1.3 Debugging-Optionen

625

12.1.4 Praktisches Debugging am Beispiel

628

12.2 Arbeiten mit Debug und Trace

632

12.2.1 Wichtige Methoden von Debug und Trace

632

12.2.2 Besonderheiten der Trace-Klasse

636

12.2.3 TraceListener-Objekte

637

12.3 Caller Information

639

12.3.1 Attribute

639

12.3.2 Anwendung

640

12.4 Fehlerbehandlung

641

12.4.1 Anweisungen zur Fehlerbehandlung

641

12.4.2 try-catch

641

12.4.3 try-finally

646

12.4.4 Das Standardverhalten bei Ausnahmen festlegen

649

12.4.5 Die Exception-Klasse

650

12.4.6 Fehler/Ausnahmen auslösen

651

12.4.7 Eigene Fehlerklassen

651

12.4.8 Exceptionhandling zur Entwurfszeit

653

12.4.9 Code Contracts

654

13 XML in Theorie und Praxis

655

13.1 XML – etwas Theorie

655

13.1.1 Übersicht

655

13.1.2 Der XML-Grundaufbau

658

13.1.3 Wohlgeformte Dokumente

659

13.1.4 Processing Instructions (PI)

661

13.1.5 Elemente und Attribute

662

13.1.6 Verwendbare Zeichensätze

663

13.2 XSD-Schemas

666

13.2.1 XSD-Schemas und ADO.NET

666

13.2.2 XML-Schemas in Visual Studio analysieren

668

13.2.3 XML-Datei mit XSD-Schema erzeugen

672

13.2.4 XSD-Schema aus einer XML-Datei erzeugen

673

13.3 Verwendung des DOM unter .NET

673

13.3.1 Übersicht

673

13.3.2 DOM-Integration in C#

675

13.3.3 Laden von Dokumenten

675

13.3.4 Erzeugen von XML-Dokumenten

676

13.3.5 Auslesen von XML-Dateien

678

13.3.6 Direktzugriff auf einzelne Elemente

679

13.3.7 Einfügen von Informationen

680

13.3.8 Suchen in den Baumzweigen

683

13.4 XML-Verarbeitung mit LINQ to XML

686

13.4.1 Die LINQ to XML-API

686

13.4.2 Neue XML-Dokumente erzeugen

688

13.4.3 Laden und Sichern von XML-Dokumenten

690

13.4.4 Navigieren in XML-Daten

691

13.4.5 Auswählen und Filtern

693

13.4.6 Manipulieren der XML-Daten

694

13.4.7 XML-Dokumente transformieren

695

13.5 Weitere Möglichkeiten der XML-Verarbeitung

698

13.5.1 XML-Daten aus Objektstrukturen erzeugen

698

13.5.2 Schnelles Suchen in XML-Daten mit XPathNavigator

702

13.5.3 Schnelles Auslesen von XML-Daten mit XmlReader

704

13.5.4 Erzeugen von XML-Daten mit XmlWriter

706

13.5.5 XML transformieren mit XSLT

708

13.6 JSON – JavaScriptObjectNotation

710

13.6.1 Grundlagen

710

13.6.2 De-/Serialisierung mit JSON

710

13.7 Praxisbeispiele

713

13.7.1 Mit dem DOM in XML-Dokumenten navigieren

713

13.7.2 XML-Daten in eine TreeView einlesen

717

13.7.3 In Dokumenten mit dem XPathNavigator navigieren

721

14 Einführung in ADO.NET und Entity Framework

727

14.1 Eine kleine Übersicht

727

14.1.1 Die ADO.NET-Klassenhierarchie

727

14.1.2 Die Klassen der Datenprovider

729

14.1.3 Das Zusammenspiel der ADO.NET-Klassen

731

14.2 Das Connection-Objekt

732

14.2.1 Allgemeiner Aufbau

732

14.2.2 SqlConnection

732

14.2.3 Schließen einer Verbindung

733

14.2.4 Eigenschaften des Connection-Objekts

734

14.2.5 Methoden des Connection-Objekts

736

14.2.6 Der ConnectionStringBuilder

737

14.3 Das Command-Objekt

737

14.3.1 Erzeugen und Anwenden eines Command-Objekts

738

14.3.2 Erzeugen mittels CreateCommand-Methode

739

14.3.3 Eigenschaften des Command-Objekts

739

14.3.4 Methoden des Command-Objekts

741

14.3.5 Freigabe von Connection- und Command-Objekten

743

14.4 Parameter-Objekte

744

14.4.1 Erzeugen und Anwenden eines Parameter-Objekts

744

14.4.2 Eigenschaften des Parameter-Objekts

745

14.5 Das CommandBuilder-Objekt

746

14.5.1 Erzeugen

746

14.5.2 Anwenden

746

14.6 Das DataReader-Objekt

747

14.6.1 DataReader erzeugen

747

14.6.2 Daten lesen

748

14.6.3 Eigenschaften des DataReaders

749

14.6.4 Methoden des DataReaders

749

14.7 Das DataAdapter-Objekt

750

14.7.1 DataAdapter erzeugen

750

14.7.2 Command-Eigenschaften

751

14.7.3 Fill-Methode

752

14.7.4 Update-Methode

753

14.8 Entity Framework

754

14.8.1 Überblick

754

14.8.2 DatabaseFirst

756

14.8.3 CodeFirst

764

14.9 Praxisbeispiele

769

14.9.1 Wichtige ADO.NET-Objekte im Einsatz

769

14.9.2 Eine Aktionsabfrage ausführen

771

14.9.3 Eine StoredProcedure aufrufen

773

14.9.4 Die Datenbank aktualisieren

776

15 Das DataSet

781

15.1 Grundlegende Features des DataSets

781

15.1.1 Die Objekthierarchie

782

15.1.2 Die wichtigsten Klassen

782

15.1.3 Erzeugen eines DataSets

783

15.2 Das DataTable-Objekt

785

15.2.1 DataTable erzeugen

785

15.2.2 Spalten hinzufügen

785

15.2.3 Zeilen zur DataTable hinzufügen

786

15.2.4 Auf den Inhalt einer DataTable zugreifen

787

15.3 Die DataView

789

15.3.1 Erzeugen einer DataView

790

15.3.2 Sortieren und Filtern von Datensätzen

790

15.3.3 Suchen von Datensätzen

791

15.4 Typisierte DataSets

791

15.4.1 Ein typisiertes DataSet erzeugen

792

15.4.2 Das Konzept der Datenquellen

793

15.4.3 Typisierte DataSets und TableAdapter

794

15.5 Die Qual der Wahl

795

15.5.1 DataReader – der schnelle Lesezugriff

796

15.5.2 DataSet – die Datenbank im Hauptspeicher

796

15.5.3 Objektrelationales Mapping – die Zukunft?

797

15.6 Praxisbeispiele

798

15.6.1 In der DataView sortieren und filtern

798

15.6.2 Suche nach Datensätzen

800

15.6.3 Ein DataSet in einen XML-String serialisieren

802

15.6.4 Untypisiertes DataSet in ein typisiertes konvertieren

806

16 Verteilen von Anwendungen

813

16.1 ClickOnce-Deployment

814

16.1.1 Übersicht/Einschränkungen

814

16.1.2 Die Vorgehensweise

815

16.1.3 Ort der Veröffentlichung

815

16.1.4 Anwendungsdateien

816

16.1.5 Erforderliche Komponenten

817

16.1.6 Aktualisierungen

818

16.1.7 Veröffentlichungsoptionen

819

16.1.8 Veröffentlichen

820

16.1.9 Verzeichnisstruktur

820

16.1.10 Der Webpublishing-Assistent

822

16.1.11 Neue Versionen erstellen

823

16.2 Setup-Projekte

823

16.2.1 Installation

823

16.2.2 Ein neues Setup-Projekt

825

16.2.3 Dateisystem-Editor

830

16.2.4 Registrierungs-Editor

831

16.2.5 Dateityp-Editor

832

16.2.6 Benutzeroberflächen-Editor

832

16.2.7 Editor für benutzerdefinierte Aktionen

833

16.2.8 Editor für Startbedingungen

834

17 Weitere Techniken

835

17.1 Zugriff auf die Zwischenablage

835

17.1.1 Das Clipboard-Objekt

835

17.1.2 Zwischenablage-Funktionen für Textboxen

837

17.2 Arbeiten mit der Registry

838

17.2.1 Allgemeines

838

17.2.2 Registry-Unterstützung in .NET

840

17.3 .NET-Reflection

841

17.3.1 Übersicht

841

17.3.2 Assembly laden

842

17.3.3 Mittels GetType und Type Informationen sammeln

842

17.3.4 Dynamisches Laden von Assemblies

845

17.4 Praxisbeispiele

848

17.4.1 Zugriff auf die Registry

848

17.4.2 Dateiverknüpfungen erzeugen

850

17.4.3 Betrachter für Manifestressourcen

852

17.4.4 Die Zwischenablage überwachen und anzeigen

855

17.4.5 Die WIA-Library kennenlernen

858

17.4.6 Auf eine Webcam zugreifen

869

17.4.7 Auf den Scanner zugreifen

871

17.4.8 OpenOffice.org Writer per OLE steuern

877

17.4.9 Nutzer und Gruppen des aktuellen Systems ermitteln

884

17.4.10 Testen, ob Nutzer in einer Gruppe enthalten ist

886

17.4.11 Testen, ob der Nutzer ein Administrator ist

888

17.4.12 Die IP-Adressen des Computers bestimmen

889

17.4.13 Die IP-Adresse über den Hostnamen bestimmen

890

17.4.14 Diverse Systeminformationen ermitteln

891

17.4.15 Alles über den Bildschirm erfahren

899

17.4.16 Sound per MCI aufnehmen

901

17.4.17 Mikrofonpegel anzeigen

904

17.4.18 Pegeldiagramm aufzeichnen

906

17.4.19 Sound-und Videodateien per MCI abspielen

909

18 Konsolenanwendungen

919

18.1 Grundaufbau/Konzepte

919

18.1.1 Unser Hauptprogramm – Program.cs

920

18.1.2 Rückgabe eines Fehlerstatus

921

18.1.3 Parameterübergabe

922

18.1.4 Zugriff auf die Umgebungsvariablen

924

18.2 Die Kommandozentrale: System.Console

925

18.2.1 Eigenschaften

925

18.2.2 Methoden/Ereignisse

926

18.2.3 Textausgaben

926

18.2.4 Farbangaben

927

18.2.5 Tastaturabfragen

929

18.2.6 Arbeiten mit Streamdaten

930

18.3 Praxisbeispiel

932

18.3.1 Farbige Konsolenanwendung

932

18.3.2 Weitere Hinweise und Beispiele

934

Anhang A: Glossar

935

Anhang B: Wichtige Dateiextensions

939

Index

941

Leere Seite

2

 

© 2009-2018 ciando GmbH