Inhalt | 6 |
1 Vorwort | 12 |
2 Entwicklungsumgebungen für C# | 16 |
2.1 VISUAL STUDIO.NET | 18 |
2.2 BORLAND C# BUILDER | 50 |
2.3 VISUAL C# – STANDARD | 75 |
2.4 SHARPDEVELOP | 75 |
2.5 ASP.NET WEB MATRIX | 77 |
2.6 SCHLUßWORT | 78 |
3 Einführung in die Programmiersprache C# | 80 |
3.1 GRUNDLAGEN | 81 |
3.1.1 Hallo Welt | 81 |
3.1.2 Operatoren | 83 |
3.1.3 Grundkonzepte | 85 |
3.1.4 Programme und Assemblies | 89 |
3.2 AUSNAHMEBEHANDLUNG (EXCEPTIONS) | 92 |
3.2.1 Exceptions auslösen | 93 |
3.2.2 Exceptions abfangen | 94 |
3.2.3 Die Syntax des try-catch-finally-Blocks | 97 |
3.2.4 Exceptions bei Überlauf | 98 |
3.3 TYPEN, VARIABLEN PARAMETER | 99 |
3.3.1 Wert- und Referenztypen | 99 |
3.3.2 Variablen | 101 |
3.3.3 Parameter | 103 |
3.3.4 Der typeof-Operator | 106 |
3.3.5 Primitive Typen | 107 |
3.3.6 Zeigertypen | 109 |
3.4 ZEICHENKETTEN (STRINGS) | 111 |
3.4.1 String-Literale | 112 |
3.4.2 String-Literale mit Zeilenumbruch | 112 |
3.4.3 Optimierungen durch den Compiler | 113 |
3.4.4 Veränderbare Strings (StringBuilder) | 113 |
3.4.5 Zeichenketten formatieren | 114 |
3.5 ARRAYS | 115 |
3.5.1 Eindimensionale Arrays | 115 |
3.5.2 Mehrdimensionale Arrays | 116 |
3.5.3 Parameter-Arrays | 118 |
3.6 TYPKONVERTIERUNG | 121 |
3.6.1 Einführung | 121 |
3.6.2 Implizite Konvertierung | 122 |
3.6.3 Explizite Konvertierung | 123 |
3.6.4 Der is-Operator | 127 |
3.6.5 Der as-Operator | 127 |
3.6.6 Boxing und Unboxing | 128 |
3.6.7 Konvertierung von Zeigertypen | 129 |
3.7 ANWEISUNGEN | 130 |
3.7.1 if-Abfrage | 130 |
3.7.2 switch-Anweisung | 130 |
3.7.3 Die while-Schleife | 132 |
3.7.4 Die do-while-Schleife | 133 |
3.7.5 Die for-Schleife | 133 |
3.7.6 Die foreach-Schleife | 134 |
3.7.7 Schleifenablauf verändern | 137 |
3.7.8 Die Sprunganweisung (goto) | 138 |
3.7.9 Die using-Anweisung | 139 |
3.7.10 Die lock-Anweisung | 140 |
3.8 KLASSEN | 141 |
3.8.1 Konstanten | 141 |
3.8.2 Felder | 142 |
3.8.3 Konstruktoren | 146 |
3.8.4 Destruktoren | 148 |
3.8.5 Kapselung und Sichtbarkeit | 149 |
3.8.6 Vererbung und Versionsverwaltung | 151 |
3.8.7 Methoden überschreiben | 153 |
3.8.8 Operatoren überladen | 157 |
3.8.9 Eigenschaften | 160 |
3.8.10 Indexer | 167 |
3.9 STRUKTUREN | 168 |
3.9.1 Strukturen deklarieren | 168 |
3.9.2 Besonderheiten bei der Initialisierung | 169 |
3.10 SCHNITTSTELLEN | 172 |
3.10.1 Zugriff auf Schnittstellen-Mitglieder | 172 |
3.10.2 Schnittstellen implementieren | 175 |
3.10.3 Schnittstellen-Implementierung und Vererbung | 178 |
3.10.4 Schnittstellen erneut implementieren | 179 |
3.10.5 Abstrakte Klassen und Schnittstellen | 181 |
3.11 AUFZÄHLUNGEN | 181 |
3.11.1 Aufzählungstypen deklarieren | 181 |
3.11.2 Implizite und explizite Numerierung | 183 |
3.12 DELEGATEN EREIGNISSE | 185 |
3.12.1 Delegaten deklarieren und instanziieren | 185 |
3.12.2 Multicast-Delegaten | 187 |
3.12.3 Feld-ähnliche Ereignisse | 190 |
3.12.4 Ereigniseigenschaften | 192 |
3.13 NAMESPACES | 195 |
3.13.1 Namespaces deklarieren | 195 |
3.13.2 Namespaces importieren | 196 |
3.13.3 Aliase | 199 |
3.14 PRÄPROZESSOR-DIREKTIVEN | 200 |
3.14.1 Bedingungsdirektiven | 200 |
3.14.2 Weitere Präprozessor-Direktiven | 201 |
3.15 ATTRIBUTE | 202 |
3.15.1 Attribute verwenden | 203 |
3.15.2 Das Conditional-Attribut | 205 |
3.15.3 Das Obsolete-Attribut | 206 |
3.15.4 Das DllImport-Attribut | 207 |
3.15.5 Benutzerdefinierte Attribute | 207 |
3.15.6 Attribute auslesen (Reflektion) | 210 |
3.16 DOKUMENTATIONSKOMMENTARE | 211 |
3.16.1 Einführung | 211 |
3.16.2 Empfohlene XML-Elemente | 213 |
3.17 ZUSAMMENFASSUNG | 216 |
4 Bibliotheken | 218 |
4.1 WINDOWS FORMS | 219 |
4.1.1 Methoden und Eigenschaften eines Formulars | 220 |
4.1.2 Die Entwicklung mit Windows Forms | 224 |
4.1.3 Sicherheit mit Windows Forms | 246 |
4.1.4 Weitere Komponenten von Windows Forms… | 250 |
4.2 ADO.NET – DATENBANKSCHNITTSTELLE | 254 |
4.2.1 Das DataSet | 255 |
4.2.2 … und die DataTable | 257 |
4.2.3 Die manuelle Erstellung und Verwendung einer DataTable | 257 |
4.2.4 Constraints | 262 |
4.2.5 Das DataView | 264 |
4.2.6 Der .NET-DataProvider | 266 |
4.2.7 Unabhängigkeit (von Datenbanken) durch Interfaces | 278 |
4.2.8 Transaktionen | 283 |
4.2.9 Typisierte DataSets | 284 |
4.2.10 Stored Procedures mit ADO.NET | 287 |
4.2.11 Fazit | 291 |
4.3 WEB SERVICES | 291 |
4.3.1 Verwandte Technologien | 292 |
4.3.2 SOAP, XML und Web Services | 293 |
4.3.3 Ein erstes Beispiel | 294 |
4.3.4 Die Protokolle HTTP-GET, HTTP-POST | 299 |
4.3.5 Web Service via IDE | 301 |
4.3.6 UDDI-Wegweiser durch den Web-Service-Dschungel | 305 |
4.3.7 Dynamisches Einbinden der Web-Service-URL | 306 |
4.3.8 Asynchroner Aufruf eines Web Service | 307 |
4.3.9 Der Status eines Web Service | 310 |
4.3.10 Web Services und Transaktionen | 312 |
4.3.11 Die Web Services Enhancements 1.0 | 315 |
4.4 COMINTEROP AUTOMATISIERUNG MS OFFICE | 318 |
4.4.1 Das erste Beispiel: C# ruft COM | 320 |
4.4.2 Das zweite Beispiel: Excel ruft C# | 322 |
4.4.3 Word per Fernsteuerung | 324 |
4.4.4 Serienbriefe mit C# und MailMerge | 329 |
4.4.5 Excel per Fernsteuerung | 332 |
4.4.6 Outlook per Fernsteuerung | 335 |
4.4.7 Der Internet Explorer als Steuerelement | 339 |
4.4.8 Fazit | 340 |
4.5 .NET-REMOTING | 341 |
4.5.1 Die Struktur von .NET-Remoting | 341 |
4.5.2 Proxy und SoapSuds | 345 |
4.5.3 Dynamische Konfiguration durch XML | 347 |
4.5.4 SAOs und CAOs | 351 |
4.5.5 CAO (Client Activated Objects) | 359 |
4.5.6 Transportable Objekte | 363 |
4.5.7 Internet Information Service als Host | 369 |
4.5.8 TCP-Channel und Binary-Formatierer | 371 |
4.5.9 Fazit | 372 |
4.6 ASP.NET | 372 |
4.6.1 Die Struktur | 373 |
4.6.2 Codebehind, der Code dahinter | 376 |
4.6.3 ASP.NET-Anwendungen | 378 |
4.6.4 ASP.NET-Anwendungen entwickeln mit einer IDE | 388 |
4.6.5 Sicherheit in ASP.NET-Anwendungen | 404 |
4.6.6 Vorlagen mit ASP.NET | 415 |
4.6.7 Upload von Dateien mit ASP.NET | 419 |
4.6.8 Fazit | 420 |
5 Das .NET Compact Framework | 422 |
5.1 DAS .NET COMPACT FRAMEWORK DETAIL | 424 |
5.2 DER ENTWICKLUNGSPROZEß ANWENDUNG | 426 |
5.2.1 Die Projekttypen in Visual Studio.NET | 427 |
5.2.2 »Hallo Welt« – die erste Compact-Framework-Anwendung | 429 |
5.2.3 Erweiterungen in Visual Studio.NET, der CF-ToolBar | 431 |
5.2.4 Testen mit dem Emulator | 431 |
5.2.5 Deployment auf einen Pocket PC | 433 |
5.2.6 Die zur Verfügung stehenden Komponenten | 434 |
5.2.7 Der Einsatz von Steuerelementen | 437 |
5.3 DATENZUGRIFF MS SQL SERVER | 439 |
5.3.1 Der Namespace System.Data.SqlClient | 439 |
5.3.2 Das InputPanel-Steuerelement | 447 |
5.3.3 Der SQLCE Server 2.0 | 448 |
5.4 DEPLOYMENT | 453 |
5.5 KOMMUNIKATION WEB SERVICE | 458 |
5.6 EIGENE STEUERELEMENTE | 461 |
5.7 POCKET PC | 464 |
5.7.1 Fazit | 465 |
6 Techniken in C# | 466 |
6.1 KOMPONENTEN C# | 467 |
6.1.1 Die erste Komponente | 468 |
6.1.2 Konfiguration der Komponente im Designer | 471 |
6.1.3 Entwurfszeitattribute | 473 |
6.1.4 Eine Komponente, mehreren Klassen und Namespaces | 475 |
6.1.5 Ableitung von Steuerelementen | 476 |
6.1.6 Das UserControl | 480 |
6.1.7 Fazit | 483 |
6.2 EVENTS | 483 |
6.2.1 Events auslösen | 489 |
6.3 MULTITHREADING | 491 |
6.3.1 Warum Threads? | 491 |
6.3.2 Threads und Application Domains | 493 |
6.3.3 Threads erzeugen | 494 |
6.3.4 Thread-Status verändern | 494 |
6.3.5 Threads abbrechen | 495 |
6.3.6 Datenaustausch mit Threads | 498 |
6.3.7 Lokaler Thread-Speicher | 500 |
6.3.8 Synchronisation mit lock | 503 |
6.3.9 Auf eine Bedingung warten | 510 |
6.3.10 Synchronisation hausgemacht | 516 |
6.3.11 Typische Synchronisationsprobleme | 518 |
6.3.12 Synchronisation im Komplettpaket | 520 |
6.3.13 Prozeß-übergreifende Synchronisation | 521 |
6.3.14 Ereignis-basierte Synchronisation | 522 |
6.3.15 Synchronisation mit Windows Forms | 525 |
6.3.16 Der Thread-Pool | 528 |
6.4 SERIALISIERUNG OBJEKTEN | 532 |
6.4.1 Standard-Serialisierungsformate des .NET-Framework | 533 |
6.4.2 Zugriffsmodifizierer in der Serialisierung | 534 |
6.4.3 Die Schlüsselwörter Serializable und NonSerialized | 534 |
6.4.4 Serialisierung in der praktischen Anwendung | 535 |
6.4.5 Das Interface ISerializable | 545 |
6.5 DATEIVERARBEITUNG | 550 |
6.5.1 Auf Dateiinhalte zugreifen | 552 |
6.5.2 Verwendung der Streamklassen | 555 |
6.5.3 Isolierte Speicherung | 566 |
6.6 DELEGATEN | 568 |
6.6.1 Der sinnvolle Einsatz von Delegaten | 569 |
7 C# und der Rest der Welt | 574 |
7.1 VON JAVA C# | 578 |
7.1.1 C#-Einführung für Java-Programmierer | 578 |
7.1.2 Konvertierung von Java-Programmen nach .NET | 601 |
7.2 C++ C# | 611 |
7.2.1 Grundsätzliches | 611 |
7.2.2 Syntaktische Änderungen | 612 |
7.2.3 Typsystem | 612 |
7.2.4 Was es nicht mehr gibt | 615 |
7.3 MISCHEN C# NICHT-C# | 616 |
7.3.1 Das allgemeine Typsystem | 621 |
7.3.2 Mischen von C# und VB.NET | 623 |
7.3.3 VB.NET ruft C# ruft J# | 626 |
7.3.4 Sprachübergreifendes Debugging | 630 |
7.3.5 Mehr als eine Sprache in einem Assembly? | 632 |
7.4 C# WINDOWS | 635 |
7.4.1 Windows-Version ermitteln | 637 |
8 MSIL/CIL, die .NET-Assemblersprache | 646 |
8.1 TOOLS | 647 |
8.2 ÜBERBLICK MSIL | 648 |
8.3 DER STACK | 654 |
8.4 VERWENDEN DER KLASSENBIBLIOTHEK | 655 |
8.4.1 Arithmetik | 658 |
8.4.2 Exceptions | 658 |
8.4.3 Logik und Vergleiche | 660 |
8.4.4 Rückgabe von Werten | 661 |
8.5 DECOMPILER | 662 |
8.6 OBFUSCATION (VERSCHLEIERUNG) | 664 |
9 Anwendungen verteilen und installieren | 666 |
9.1 VERTEILUNG EINER ANWENDUNG ÜBER XCOPY | 667 |
9.1.1 GAC, StrongName & Co. | 668 |
9.2 CAB-DATEIEN | 671 |
9.3 DIE INSTALLER-KLASSE | 672 |
9.4 SETUP-PROJEKTE | 674 |
9.4.1 Windows-Setup-Projekt | 674 |
9.4.2 Web-Setup-Projekt | 678 |
9.4.3 Merge-Modul-Projekt | 679 |
9.5 NO-TOUCH DEPLOYMENT | 679 |
9.6 DEPLOYMENT .NET FRAMEWORKS | 681 |
9.6.1 Die Bootstrapper-Option | 682 |
9.6.2 Die Installation des Frameworks | 683 |
10 C# auf Unix und Mac | 686 |
10.1 ÜBERBLICK ÜBER DIE CLIS | 688 |
10.1.1 SSCLI | 688 |
10.1.2 Mono | 689 |
10.1.3 Portable.NET | 690 |
10.3.1 Klassenbibliothek – das Dateisystem | 693 |
10.3.2 Native Calls | 695 |
10.4.2 Windows.Forms auf den unterschiedlichen Systemen | 709 |
11 Befehlszeilentools | 712 |
11.1 DER C# COMPILER (CSC.EXE) | 713 |
11.2 DER IL ASSEMBLER (ILASM.EXE) | 717 |
11.3 IL DISASSEMBLER (ILDASM.EXE) | 718 |
Stichwortverzeichnis | 722 |