Eric Gunnerson
C Sharp - Die neue Sprache für Microsofts .NET-Plattform (Galileo Computing)
2 Angebote ab € 2,11 €
Eric Gunnerson
C Sharp - Die neue Sprache für Microsofts .NET-Plattform (Galileo Computing)
- Buch
Produktdetails
- Verlag: Galileo Press
- ISBN-13: 9783898421072
- Artikelnr.: 25900964
- Herstellerkennzeichnung Die Herstellerinformationen sind derzeit nicht verfügbar.
Eric Gunnerson ist führender Entwickler in Microsofts C#-Entwurfsteam. Von daher ist er intimer Kenner dieser neuen Sprache und der neuen .NET-Strategie, außerdem ein exzellenter Scheiber.
Danksagung 19
Über dieses Buch 21
Vorwort 23
1. Einleitung 25
1.1 Wozu eine weitere Sprache? 25
1.2 Die Entwicklungsziele bei C# 25
2. Grundlagen der objektorientierten -Programmierung 29
2.1 Was ist ein Objekt? 29
2.2 Vererbung 29
2.3 Das Prinzip des Containments 31
2.4 Polymorphismus und virtuelle Funktionen 31
2.5 Kapselung und Sichtbarkeit 33
3. Die .NET-Laufzeitumgebung 35
3.1 Die Ausführungsumgebung 36
3.2 Metadaten 38
3.3 Assemblierung 39
3.4 Sprachinteroperabilität 40
3.5 Attribute 41
4. Schnelleinstieg in C# 43
4.1 Hello, Universe 43
4.2 Namespaces und Using-Klausel 44
4.3 Namespace und Assemblierung 45
4.4 Grundlegende Datentypen 46
4.5 Klassen, Strukturen und Schnittstellen 47
4.6 Anweisungen 48
4.7 Enum 48
4.8 Zuweisungen und Ereignisse 49
4.9 Eigenschaften und Indizierer 49
4.10 Attribute 50
5. Ausnahmebehandlung 51
5.1 Was ist falsch an Rückgabecodes? 51
5.2 try und catch 52
5.3 Die Ausnahmehierarchie 53
5.4 Übergeben von Ausnahmen an die aufrufende Funktion 55
5.5 Benutzerdefinierte Ausnahmeklassen 58
5.6 Finally 60
5.7 Effizienz und Overhead 62
5.8 Entwurfsrichtlinien 62
6. 101 -Klassen 63
6.1 Eine einfache Klasse 63
6.2 Mitgliedsfunktionen 65
6.3 Ref- und Out-Parameter 66
6.4 Überladung 69
7. Basisklassen und Vererbung 71
7.1 Die Engineer-Klasse 71
7.2 Einfache Vererbung 72
7.3 Engineer-Arrays 74
7.4 Virtuelle Funktionen 79
7.5 Abstrakte Klassen 81
7.6 sealed-Schlüsselwort 85
8. Zugriff auf Klassenmitglieder 87
8.1 Klassenzugriff 87
8.2 Verwenden von internal für Klassenmitglieder 87
8.3 internal protected 89
8.4 Die Beziehung zwischen Klassen- und Mitgliedszugriff 89
9. Mehr zu Klassen 91
9.1 Verschachtelte Klassen 91
9.2 Weitere Verschachtelungen 92
9.3 Erstellung, Initialisierung, Zerstörung 92
9.4 Erstellungsroutinen 92
9.5 Überladung und Namensausblendung 96
9.6 Statische Felder 98
9.7 Statische Mitgliedsfunktionen 99
9.8 Statische Erstellungsroutinen 99
9.9 Konstanten 100
9.10 Schreibgeschützte Felder 101
9.11 Private Erstellungsroutinen 105
9.12 Parameterlisten variabler Länge 105
10. Strukturen (Wertetypen) 109
10.1 Eine Point-Struktur 109
10.2 Boxing und Unboxing 110
10.3 Strukturen und Erstellungsroutinen 111
10.4 Entwurfsrichtlinien 112
11. Schnittstellen 113
11.1 Ein einfaches Beispiel 113
11.2 Arbeiten mit Schnittstellen 114
11.3 Der as-Operator 116
11.4 Schnittstellen und Vererbung 118
11.5 Entwurfsrichtlinien 119
11.6 Mehrfachimplementierung 120
11.7 Auf Schnittstellen basierende Schnittstellen 126
12. Versionssteuerung mit new und override 127
12.1 Ein Beispiel zur Versionssteuerung 127
13. Anweisungen und Ausführungsverlauf 131
13.1 Auswahlanweisungen 131
13.2 Wiederholungsanweisungen 133
13.3 Sprunganweisungen 139
13.4 Feste Zuordnung 139
14. Bereiche lokaler Variablen 145
15. Operatoren 147
15.1 Rangfolge der Operatoren 147
15.2 Integrierte Operatoren 148
15.3 Benutzerdefinierte Operatoren 148
15.4 Numerische Umwandlungen 148
15.5 Arithmetische Operatoren 149
15.6 Unär Plus (+) 149
15.7 Unär Minus (-) 149
15.8 Relationale und logische Operatoren 151
15.9 Zuweisungsoperatoren 153
15.10 Typenoperatoren 154
16. Konvertierungen 157
16.1 Numerische Typen 157
16.2 Konvertierung von Klassen (Verweistypen) 162
16.3 Konvertierung von Strukturen (Wertetypen) 167
17. Arrays 169
17.1 Arrayinitialisierung 169
17.2 Mehrdimensionale und unregelmäßige Arrays 169
17.3 Arrays vom Verweistyp 171
17.4 Arraykonvertierungen 173
17.5 System.Array-Typ 173
18. Zeichenfolgen 175
18.1 Operationen 175
18.2 Konvertieren von Objekten in Zeichenfolgen 176
18.3 Ein Beispiel 177
18.4 StringBuilder 177
18.5 Reguläre Ausdrücke 179
19. Eigenschaften 185
19.1 Zugriffsroutinen 185
19.2 Eigenschaften und Vererbung 186
19.3 Verwendung von Eigenschaften 186
19.4 Nebeneffekte beim Setzen von Werten 188
19.5 Statische Eigenschaften 190
19.6 Eigenschafteneffizienz 191
20. Indizierer 193
20.1 Indizierung mit einem integer-Index 193
20.2 Indizierer und foreach 198
20.3 Entwurfsrichtlinien 201
21. Aufzählungsbezeichner 203
21.1 Eine Beispielaufzählung 203
21.2 Basistypen für Aufzählungsbezeichner 204
21.3 Initialisierung 205
21.4 Bitflagaufzählungen 206
21.5 Konvertierungen 207
22. Attribute 209
22.1 Verwenden von Attributen 210
22.2 Einlegen von Attributen 214
22.3 Eigene Attribute 214
22.4 Attributreflektion 217
23. Zuweisungen 221
23.1 Verwenden von Zuweisungen 221
23.2 Zuweisungen als statische Mitglieder 223
23.3 Zuweisungen als statische Eigenschaften 225
24. Ereignisse 229
24.1 Ein Ereignis zu einer neuen E-Mail-Nachricht 229
24.2 Das Ereignisfeld 231
24.3 Multicastereignisse 231
24.4 Selten verwendete Ereignisse 232
25. Benutzerdefinierte Konvertierung 237
25.1 Ein einfaches Beispiel 237
25.2 Prä- und Postkonvertierungen 239
25.3 Konvertierungen zwischen Strukturen 240
25.4 Klassen und Prä-/Postkonvertierungen 246
25.5 Entwurfsrichtlinien 253
25.6 So funktioniert's 256
26. Operatorüberladung 259
26.1 Unäre Operatoren 259
26.2 Binäre Operatoren 260
26.3 Ein Beispiel 260
26.4 Beschränkungen 261
26.5 Richtlinien 262
27. Weitere Sprachdetails 263
27.1 Die Main-Funktion 263
27.2 Vorverarbeitung 265
27.3 Lexikalische Details 268
28. Freunde finden mit den .NET-Frameworks 273
28.1 Was alle Objekte tun 273
28.2 Hashes und GetHashCode() 276
29. System.Array und die Auflistungsklassen 281
29.1 Sortieren und Suchen 281
29.2 ICloneable 294
29.3 Entwurfsrichtlinien 296
30. Interoperabilität 299
30.1 Benutzen von COM-Objekten 299
30.2 Von COM-Objekten benutzt werden 299
30.3 Aufrufen systemeigener DLL-Funktionen 299
31. Überblick über die .NET-Frameworks 301
31.1 Numerische Formatierung 301
31.2 Formatierung von Datum und Uhrzeit 311
31.3 Benutzerdefinierte Objektformatierung 312
31.4 Numerische Syntaxanalyse 315
31.5 XML-Verwendung in C# 315
31.6 Eingabe/Ausgabe 315
31.7 Serialisierung 320
31.8 Threading 323
31.9 Lesen von Webseiten 325
32. C# im Detail 327
32.1 C#-Stil 327
32.2 Richtlinien für Bibliotheksautoren 328
32.3 Benennung von Klassen 329
32.4 Unsicherer Code 329
32.5 XML-Dokumentation 334
32.6 Speicherbereinigung in der .NET-Laufzeitumgebung 339
32.7 Weitergehende Reflektion 344
32.8 Optimierung 352
33. Defensive Programmierung 353
33.1 Bedingte Methoden 353
33.2 Debug- und Trace-Klassen 354
33.3 Assert-Anweisungen 355
33.4 Debug- und Trace-Ausgabe 356
33.5 Verwenden von Switch-Klassen zur Steuerung von Debug und Trace 357
33.6 BooleanSwitch 358
34. Die Befehlszeile 365
34.1 Einfache Verwendung 365
34.2 Antwortdateien 365
34.3 Befehlszeilenoptionen 365
35. C# im Vergleich zu anderen Sprachen 369
35.1 Unterschiede zwischen C# und C/C++ 369
35.2 Unterschiede zwischen C# und Java 372
35.3 Unterschiede zwischen C# und Visual Basic 6 381
35.4 Codeaussehen 381
35.5 Weitere .NET-Sprachen 387
36 C# und die Zukunft 389
Index 391
Über dieses Buch 21
Vorwort 23
1. Einleitung 25
1.1 Wozu eine weitere Sprache? 25
1.2 Die Entwicklungsziele bei C# 25
2. Grundlagen der objektorientierten -Programmierung 29
2.1 Was ist ein Objekt? 29
2.2 Vererbung 29
2.3 Das Prinzip des Containments 31
2.4 Polymorphismus und virtuelle Funktionen 31
2.5 Kapselung und Sichtbarkeit 33
3. Die .NET-Laufzeitumgebung 35
3.1 Die Ausführungsumgebung 36
3.2 Metadaten 38
3.3 Assemblierung 39
3.4 Sprachinteroperabilität 40
3.5 Attribute 41
4. Schnelleinstieg in C# 43
4.1 Hello, Universe 43
4.2 Namespaces und Using-Klausel 44
4.3 Namespace und Assemblierung 45
4.4 Grundlegende Datentypen 46
4.5 Klassen, Strukturen und Schnittstellen 47
4.6 Anweisungen 48
4.7 Enum 48
4.8 Zuweisungen und Ereignisse 49
4.9 Eigenschaften und Indizierer 49
4.10 Attribute 50
5. Ausnahmebehandlung 51
5.1 Was ist falsch an Rückgabecodes? 51
5.2 try und catch 52
5.3 Die Ausnahmehierarchie 53
5.4 Übergeben von Ausnahmen an die aufrufende Funktion 55
5.5 Benutzerdefinierte Ausnahmeklassen 58
5.6 Finally 60
5.7 Effizienz und Overhead 62
5.8 Entwurfsrichtlinien 62
6. 101 -Klassen 63
6.1 Eine einfache Klasse 63
6.2 Mitgliedsfunktionen 65
6.3 Ref- und Out-Parameter 66
6.4 Überladung 69
7. Basisklassen und Vererbung 71
7.1 Die Engineer-Klasse 71
7.2 Einfache Vererbung 72
7.3 Engineer-Arrays 74
7.4 Virtuelle Funktionen 79
7.5 Abstrakte Klassen 81
7.6 sealed-Schlüsselwort 85
8. Zugriff auf Klassenmitglieder 87
8.1 Klassenzugriff 87
8.2 Verwenden von internal für Klassenmitglieder 87
8.3 internal protected 89
8.4 Die Beziehung zwischen Klassen- und Mitgliedszugriff 89
9. Mehr zu Klassen 91
9.1 Verschachtelte Klassen 91
9.2 Weitere Verschachtelungen 92
9.3 Erstellung, Initialisierung, Zerstörung 92
9.4 Erstellungsroutinen 92
9.5 Überladung und Namensausblendung 96
9.6 Statische Felder 98
9.7 Statische Mitgliedsfunktionen 99
9.8 Statische Erstellungsroutinen 99
9.9 Konstanten 100
9.10 Schreibgeschützte Felder 101
9.11 Private Erstellungsroutinen 105
9.12 Parameterlisten variabler Länge 105
10. Strukturen (Wertetypen) 109
10.1 Eine Point-Struktur 109
10.2 Boxing und Unboxing 110
10.3 Strukturen und Erstellungsroutinen 111
10.4 Entwurfsrichtlinien 112
11. Schnittstellen 113
11.1 Ein einfaches Beispiel 113
11.2 Arbeiten mit Schnittstellen 114
11.3 Der as-Operator 116
11.4 Schnittstellen und Vererbung 118
11.5 Entwurfsrichtlinien 119
11.6 Mehrfachimplementierung 120
11.7 Auf Schnittstellen basierende Schnittstellen 126
12. Versionssteuerung mit new und override 127
12.1 Ein Beispiel zur Versionssteuerung 127
13. Anweisungen und Ausführungsverlauf 131
13.1 Auswahlanweisungen 131
13.2 Wiederholungsanweisungen 133
13.3 Sprunganweisungen 139
13.4 Feste Zuordnung 139
14. Bereiche lokaler Variablen 145
15. Operatoren 147
15.1 Rangfolge der Operatoren 147
15.2 Integrierte Operatoren 148
15.3 Benutzerdefinierte Operatoren 148
15.4 Numerische Umwandlungen 148
15.5 Arithmetische Operatoren 149
15.6 Unär Plus (+) 149
15.7 Unär Minus (-) 149
15.8 Relationale und logische Operatoren 151
15.9 Zuweisungsoperatoren 153
15.10 Typenoperatoren 154
16. Konvertierungen 157
16.1 Numerische Typen 157
16.2 Konvertierung von Klassen (Verweistypen) 162
16.3 Konvertierung von Strukturen (Wertetypen) 167
17. Arrays 169
17.1 Arrayinitialisierung 169
17.2 Mehrdimensionale und unregelmäßige Arrays 169
17.3 Arrays vom Verweistyp 171
17.4 Arraykonvertierungen 173
17.5 System.Array-Typ 173
18. Zeichenfolgen 175
18.1 Operationen 175
18.2 Konvertieren von Objekten in Zeichenfolgen 176
18.3 Ein Beispiel 177
18.4 StringBuilder 177
18.5 Reguläre Ausdrücke 179
19. Eigenschaften 185
19.1 Zugriffsroutinen 185
19.2 Eigenschaften und Vererbung 186
19.3 Verwendung von Eigenschaften 186
19.4 Nebeneffekte beim Setzen von Werten 188
19.5 Statische Eigenschaften 190
19.6 Eigenschafteneffizienz 191
20. Indizierer 193
20.1 Indizierung mit einem integer-Index 193
20.2 Indizierer und foreach 198
20.3 Entwurfsrichtlinien 201
21. Aufzählungsbezeichner 203
21.1 Eine Beispielaufzählung 203
21.2 Basistypen für Aufzählungsbezeichner 204
21.3 Initialisierung 205
21.4 Bitflagaufzählungen 206
21.5 Konvertierungen 207
22. Attribute 209
22.1 Verwenden von Attributen 210
22.2 Einlegen von Attributen 214
22.3 Eigene Attribute 214
22.4 Attributreflektion 217
23. Zuweisungen 221
23.1 Verwenden von Zuweisungen 221
23.2 Zuweisungen als statische Mitglieder 223
23.3 Zuweisungen als statische Eigenschaften 225
24. Ereignisse 229
24.1 Ein Ereignis zu einer neuen E-Mail-Nachricht 229
24.2 Das Ereignisfeld 231
24.3 Multicastereignisse 231
24.4 Selten verwendete Ereignisse 232
25. Benutzerdefinierte Konvertierung 237
25.1 Ein einfaches Beispiel 237
25.2 Prä- und Postkonvertierungen 239
25.3 Konvertierungen zwischen Strukturen 240
25.4 Klassen und Prä-/Postkonvertierungen 246
25.5 Entwurfsrichtlinien 253
25.6 So funktioniert's 256
26. Operatorüberladung 259
26.1 Unäre Operatoren 259
26.2 Binäre Operatoren 260
26.3 Ein Beispiel 260
26.4 Beschränkungen 261
26.5 Richtlinien 262
27. Weitere Sprachdetails 263
27.1 Die Main-Funktion 263
27.2 Vorverarbeitung 265
27.3 Lexikalische Details 268
28. Freunde finden mit den .NET-Frameworks 273
28.1 Was alle Objekte tun 273
28.2 Hashes und GetHashCode() 276
29. System.Array und die Auflistungsklassen 281
29.1 Sortieren und Suchen 281
29.2 ICloneable 294
29.3 Entwurfsrichtlinien 296
30. Interoperabilität 299
30.1 Benutzen von COM-Objekten 299
30.2 Von COM-Objekten benutzt werden 299
30.3 Aufrufen systemeigener DLL-Funktionen 299
31. Überblick über die .NET-Frameworks 301
31.1 Numerische Formatierung 301
31.2 Formatierung von Datum und Uhrzeit 311
31.3 Benutzerdefinierte Objektformatierung 312
31.4 Numerische Syntaxanalyse 315
31.5 XML-Verwendung in C# 315
31.6 Eingabe/Ausgabe 315
31.7 Serialisierung 320
31.8 Threading 323
31.9 Lesen von Webseiten 325
32. C# im Detail 327
32.1 C#-Stil 327
32.2 Richtlinien für Bibliotheksautoren 328
32.3 Benennung von Klassen 329
32.4 Unsicherer Code 329
32.5 XML-Dokumentation 334
32.6 Speicherbereinigung in der .NET-Laufzeitumgebung 339
32.7 Weitergehende Reflektion 344
32.8 Optimierung 352
33. Defensive Programmierung 353
33.1 Bedingte Methoden 353
33.2 Debug- und Trace-Klassen 354
33.3 Assert-Anweisungen 355
33.4 Debug- und Trace-Ausgabe 356
33.5 Verwenden von Switch-Klassen zur Steuerung von Debug und Trace 357
33.6 BooleanSwitch 358
34. Die Befehlszeile 365
34.1 Einfache Verwendung 365
34.2 Antwortdateien 365
34.3 Befehlszeilenoptionen 365
35. C# im Vergleich zu anderen Sprachen 369
35.1 Unterschiede zwischen C# und C/C++ 369
35.2 Unterschiede zwischen C# und Java 372
35.3 Unterschiede zwischen C# und Visual Basic 6 381
35.4 Codeaussehen 381
35.5 Weitere .NET-Sprachen 387
36 C# und die Zukunft 389
Index 391
Danksagung 19
Über dieses Buch 21
Vorwort 23
1. Einleitung 25
1.1 Wozu eine weitere Sprache? 25
1.2 Die Entwicklungsziele bei C# 25
2. Grundlagen der objektorientierten -Programmierung 29
2.1 Was ist ein Objekt? 29
2.2 Vererbung 29
2.3 Das Prinzip des Containments 31
2.4 Polymorphismus und virtuelle Funktionen 31
2.5 Kapselung und Sichtbarkeit 33
3. Die .NET-Laufzeitumgebung 35
3.1 Die Ausführungsumgebung 36
3.2 Metadaten 38
3.3 Assemblierung 39
3.4 Sprachinteroperabilität 40
3.5 Attribute 41
4. Schnelleinstieg in C# 43
4.1 Hello, Universe 43
4.2 Namespaces und Using-Klausel 44
4.3 Namespace und Assemblierung 45
4.4 Grundlegende Datentypen 46
4.5 Klassen, Strukturen und Schnittstellen 47
4.6 Anweisungen 48
4.7 Enum 48
4.8 Zuweisungen und Ereignisse 49
4.9 Eigenschaften und Indizierer 49
4.10 Attribute 50
5. Ausnahmebehandlung 51
5.1 Was ist falsch an Rückgabecodes? 51
5.2 try und catch 52
5.3 Die Ausnahmehierarchie 53
5.4 Übergeben von Ausnahmen an die aufrufende Funktion 55
5.5 Benutzerdefinierte Ausnahmeklassen 58
5.6 Finally 60
5.7 Effizienz und Overhead 62
5.8 Entwurfsrichtlinien 62
6. 101 -Klassen 63
6.1 Eine einfache Klasse 63
6.2 Mitgliedsfunktionen 65
6.3 Ref- und Out-Parameter 66
6.4 Überladung 69
7. Basisklassen und Vererbung 71
7.1 Die Engineer-Klasse 71
7.2 Einfache Vererbung 72
7.3 Engineer-Arrays 74
7.4 Virtuelle Funktionen 79
7.5 Abstrakte Klassen 81
7.6 sealed-Schlüsselwort 85
8. Zugriff auf Klassenmitglieder 87
8.1 Klassenzugriff 87
8.2 Verwenden von internal für Klassenmitglieder 87
8.3 internal protected 89
8.4 Die Beziehung zwischen Klassen- und Mitgliedszugriff 89
9. Mehr zu Klassen 91
9.1 Verschachtelte Klassen 91
9.2 Weitere Verschachtelungen 92
9.3 Erstellung, Initialisierung, Zerstörung 92
9.4 Erstellungsroutinen 92
9.5 Überladung und Namensausblendung 96
9.6 Statische Felder 98
9.7 Statische Mitgliedsfunktionen 99
9.8 Statische Erstellungsroutinen 99
9.9 Konstanten 100
9.10 Schreibgeschützte Felder 101
9.11 Private Erstellungsroutinen 105
9.12 Parameterlisten variabler Länge 105
10. Strukturen (Wertetypen) 109
10.1 Eine Point-Struktur 109
10.2 Boxing und Unboxing 110
10.3 Strukturen und Erstellungsroutinen 111
10.4 Entwurfsrichtlinien 112
11. Schnittstellen 113
11.1 Ein einfaches Beispiel 113
11.2 Arbeiten mit Schnittstellen 114
11.3 Der as-Operator 116
11.4 Schnittstellen und Vererbung 118
11.5 Entwurfsrichtlinien 119
11.6 Mehrfachimplementierung 120
11.7 Auf Schnittstellen basierende Schnittstellen 126
12. Versionssteuerung mit new und override 127
12.1 Ein Beispiel zur Versionssteuerung 127
13. Anweisungen und Ausführungsverlauf 131
13.1 Auswahlanweisungen 131
13.2 Wiederholungsanweisungen 133
13.3 Sprunganweisungen 139
13.4 Feste Zuordnung 139
14. Bereiche lokaler Variablen 145
15. Operatoren 147
15.1 Rangfolge der Operatoren 147
15.2 Integrierte Operatoren 148
15.3 Benutzerdefinierte Operatoren 148
15.4 Numerische Umwandlungen 148
15.5 Arithmetische Operatoren 149
15.6 Unär Plus (+) 149
15.7 Unär Minus (-) 149
15.8 Relationale und logische Operatoren 151
15.9 Zuweisungsoperatoren 153
15.10 Typenoperatoren 154
16. Konvertierungen 157
16.1 Numerische Typen 157
16.2 Konvertierung von Klassen (Verweistypen) 162
16.3 Konvertierung von Strukturen (Wertetypen) 167
17. Arrays 169
17.1 Arrayinitialisierung 169
17.2 Mehrdimensionale und unregelmäßige Arrays 169
17.3 Arrays vom Verweistyp 171
17.4 Arraykonvertierungen 173
17.5 System.Array-Typ 173
18. Zeichenfolgen 175
18.1 Operationen 175
18.2 Konvertieren von Objekten in Zeichenfolgen 176
18.3 Ein Beispiel 177
18.4 StringBuilder 177
18.5 Reguläre Ausdrücke 179
19. Eigenschaften 185
19.1 Zugriffsroutinen 185
19.2 Eigenschaften und Vererbung 186
19.3 Verwendung von Eigenschaften 186
19.4 Nebeneffekte beim Setzen von Werten 188
19.5 Statische Eigenschaften 190
19.6 Eigenschafteneffizienz 191
20. Indizierer 193
20.1 Indizierung mit einem integer-Index 193
20.2 Indizierer und foreach 198
20.3 Entwurfsrichtlinien 201
21. Aufzählungsbezeichner 203
21.1 Eine Beispielaufzählung 203
21.2 Basistypen für Aufzählungsbezeichner 204
21.3 Initialisierung 205
21.4 Bitflagaufzählungen 206
21.5 Konvertierungen 207
22. Attribute 209
22.1 Verwenden von Attributen 210
22.2 Einlegen von Attributen 214
22.3 Eigene Attribute 214
22.4 Attributreflektion 217
23. Zuweisungen 221
23.1 Verwenden von Zuweisungen 221
23.2 Zuweisungen als statische Mitglieder 223
23.3 Zuweisungen als statische Eigenschaften 225
24. Ereignisse 229
24.1 Ein Ereignis zu einer neuen E-Mail-Nachricht 229
24.2 Das Ereignisfeld 231
24.3 Multicastereignisse 231
24.4 Selten verwendete Ereignisse 232
25. Benutzerdefinierte Konvertierung 237
25.1 Ein einfaches Beispiel 237
25.2 Prä- und Postkonvertierungen 239
25.3 Konvertierungen zwischen Strukturen 240
25.4 Klassen und Prä-/Postkonvertierungen 246
25.5 Entwurfsrichtlinien 253
25.6 So funktioniert's 256
26. Operatorüberladung 259
26.1 Unäre Operatoren 259
26.2 Binäre Operatoren 260
26.3 Ein Beispiel 260
26.4 Beschränkungen 261
26.5 Richtlinien 262
27. Weitere Sprachdetails 263
27.1 Die Main-Funktion 263
27.2 Vorverarbeitung 265
27.3 Lexikalische Details 268
28. Freunde finden mit den .NET-Frameworks 273
28.1 Was alle Objekte tun 273
28.2 Hashes und GetHashCode() 276
29. System.Array und die Auflistungsklassen 281
29.1 Sortieren und Suchen 281
29.2 ICloneable 294
29.3 Entwurfsrichtlinien 296
30. Interoperabilität 299
30.1 Benutzen von COM-Objekten 299
30.2 Von COM-Objekten benutzt werden 299
30.3 Aufrufen systemeigener DLL-Funktionen 299
31. Überblick über die .NET-Frameworks 301
31.1 Numerische Formatierung 301
31.2 Formatierung von Datum und Uhrzeit 311
31.3 Benutzerdefinierte Objektformatierung 312
31.4 Numerische Syntaxanalyse 315
31.5 XML-Verwendung in C# 315
31.6 Eingabe/Ausgabe 315
31.7 Serialisierung 320
31.8 Threading 323
31.9 Lesen von Webseiten 325
32. C# im Detail 327
32.1 C#-Stil 327
32.2 Richtlinien für Bibliotheksautoren 328
32.3 Benennung von Klassen 329
32.4 Unsicherer Code 329
32.5 XML-Dokumentation 334
32.6 Speicherbereinigung in der .NET-Laufzeitumgebung 339
32.7 Weitergehende Reflektion 344
32.8 Optimierung 352
33. Defensive Programmierung 353
33.1 Bedingte Methoden 353
33.2 Debug- und Trace-Klassen 354
33.3 Assert-Anweisungen 355
33.4 Debug- und Trace-Ausgabe 356
33.5 Verwenden von Switch-Klassen zur Steuerung von Debug und Trace 357
33.6 BooleanSwitch 358
34. Die Befehlszeile 365
34.1 Einfache Verwendung 365
34.2 Antwortdateien 365
34.3 Befehlszeilenoptionen 365
35. C# im Vergleich zu anderen Sprachen 369
35.1 Unterschiede zwischen C# und C/C++ 369
35.2 Unterschiede zwischen C# und Java 372
35.3 Unterschiede zwischen C# und Visual Basic 6 381
35.4 Codeaussehen 381
35.5 Weitere .NET-Sprachen 387
36 C# und die Zukunft 389
Index 391
Über dieses Buch 21
Vorwort 23
1. Einleitung 25
1.1 Wozu eine weitere Sprache? 25
1.2 Die Entwicklungsziele bei C# 25
2. Grundlagen der objektorientierten -Programmierung 29
2.1 Was ist ein Objekt? 29
2.2 Vererbung 29
2.3 Das Prinzip des Containments 31
2.4 Polymorphismus und virtuelle Funktionen 31
2.5 Kapselung und Sichtbarkeit 33
3. Die .NET-Laufzeitumgebung 35
3.1 Die Ausführungsumgebung 36
3.2 Metadaten 38
3.3 Assemblierung 39
3.4 Sprachinteroperabilität 40
3.5 Attribute 41
4. Schnelleinstieg in C# 43
4.1 Hello, Universe 43
4.2 Namespaces und Using-Klausel 44
4.3 Namespace und Assemblierung 45
4.4 Grundlegende Datentypen 46
4.5 Klassen, Strukturen und Schnittstellen 47
4.6 Anweisungen 48
4.7 Enum 48
4.8 Zuweisungen und Ereignisse 49
4.9 Eigenschaften und Indizierer 49
4.10 Attribute 50
5. Ausnahmebehandlung 51
5.1 Was ist falsch an Rückgabecodes? 51
5.2 try und catch 52
5.3 Die Ausnahmehierarchie 53
5.4 Übergeben von Ausnahmen an die aufrufende Funktion 55
5.5 Benutzerdefinierte Ausnahmeklassen 58
5.6 Finally 60
5.7 Effizienz und Overhead 62
5.8 Entwurfsrichtlinien 62
6. 101 -Klassen 63
6.1 Eine einfache Klasse 63
6.2 Mitgliedsfunktionen 65
6.3 Ref- und Out-Parameter 66
6.4 Überladung 69
7. Basisklassen und Vererbung 71
7.1 Die Engineer-Klasse 71
7.2 Einfache Vererbung 72
7.3 Engineer-Arrays 74
7.4 Virtuelle Funktionen 79
7.5 Abstrakte Klassen 81
7.6 sealed-Schlüsselwort 85
8. Zugriff auf Klassenmitglieder 87
8.1 Klassenzugriff 87
8.2 Verwenden von internal für Klassenmitglieder 87
8.3 internal protected 89
8.4 Die Beziehung zwischen Klassen- und Mitgliedszugriff 89
9. Mehr zu Klassen 91
9.1 Verschachtelte Klassen 91
9.2 Weitere Verschachtelungen 92
9.3 Erstellung, Initialisierung, Zerstörung 92
9.4 Erstellungsroutinen 92
9.5 Überladung und Namensausblendung 96
9.6 Statische Felder 98
9.7 Statische Mitgliedsfunktionen 99
9.8 Statische Erstellungsroutinen 99
9.9 Konstanten 100
9.10 Schreibgeschützte Felder 101
9.11 Private Erstellungsroutinen 105
9.12 Parameterlisten variabler Länge 105
10. Strukturen (Wertetypen) 109
10.1 Eine Point-Struktur 109
10.2 Boxing und Unboxing 110
10.3 Strukturen und Erstellungsroutinen 111
10.4 Entwurfsrichtlinien 112
11. Schnittstellen 113
11.1 Ein einfaches Beispiel 113
11.2 Arbeiten mit Schnittstellen 114
11.3 Der as-Operator 116
11.4 Schnittstellen und Vererbung 118
11.5 Entwurfsrichtlinien 119
11.6 Mehrfachimplementierung 120
11.7 Auf Schnittstellen basierende Schnittstellen 126
12. Versionssteuerung mit new und override 127
12.1 Ein Beispiel zur Versionssteuerung 127
13. Anweisungen und Ausführungsverlauf 131
13.1 Auswahlanweisungen 131
13.2 Wiederholungsanweisungen 133
13.3 Sprunganweisungen 139
13.4 Feste Zuordnung 139
14. Bereiche lokaler Variablen 145
15. Operatoren 147
15.1 Rangfolge der Operatoren 147
15.2 Integrierte Operatoren 148
15.3 Benutzerdefinierte Operatoren 148
15.4 Numerische Umwandlungen 148
15.5 Arithmetische Operatoren 149
15.6 Unär Plus (+) 149
15.7 Unär Minus (-) 149
15.8 Relationale und logische Operatoren 151
15.9 Zuweisungsoperatoren 153
15.10 Typenoperatoren 154
16. Konvertierungen 157
16.1 Numerische Typen 157
16.2 Konvertierung von Klassen (Verweistypen) 162
16.3 Konvertierung von Strukturen (Wertetypen) 167
17. Arrays 169
17.1 Arrayinitialisierung 169
17.2 Mehrdimensionale und unregelmäßige Arrays 169
17.3 Arrays vom Verweistyp 171
17.4 Arraykonvertierungen 173
17.5 System.Array-Typ 173
18. Zeichenfolgen 175
18.1 Operationen 175
18.2 Konvertieren von Objekten in Zeichenfolgen 176
18.3 Ein Beispiel 177
18.4 StringBuilder 177
18.5 Reguläre Ausdrücke 179
19. Eigenschaften 185
19.1 Zugriffsroutinen 185
19.2 Eigenschaften und Vererbung 186
19.3 Verwendung von Eigenschaften 186
19.4 Nebeneffekte beim Setzen von Werten 188
19.5 Statische Eigenschaften 190
19.6 Eigenschafteneffizienz 191
20. Indizierer 193
20.1 Indizierung mit einem integer-Index 193
20.2 Indizierer und foreach 198
20.3 Entwurfsrichtlinien 201
21. Aufzählungsbezeichner 203
21.1 Eine Beispielaufzählung 203
21.2 Basistypen für Aufzählungsbezeichner 204
21.3 Initialisierung 205
21.4 Bitflagaufzählungen 206
21.5 Konvertierungen 207
22. Attribute 209
22.1 Verwenden von Attributen 210
22.2 Einlegen von Attributen 214
22.3 Eigene Attribute 214
22.4 Attributreflektion 217
23. Zuweisungen 221
23.1 Verwenden von Zuweisungen 221
23.2 Zuweisungen als statische Mitglieder 223
23.3 Zuweisungen als statische Eigenschaften 225
24. Ereignisse 229
24.1 Ein Ereignis zu einer neuen E-Mail-Nachricht 229
24.2 Das Ereignisfeld 231
24.3 Multicastereignisse 231
24.4 Selten verwendete Ereignisse 232
25. Benutzerdefinierte Konvertierung 237
25.1 Ein einfaches Beispiel 237
25.2 Prä- und Postkonvertierungen 239
25.3 Konvertierungen zwischen Strukturen 240
25.4 Klassen und Prä-/Postkonvertierungen 246
25.5 Entwurfsrichtlinien 253
25.6 So funktioniert's 256
26. Operatorüberladung 259
26.1 Unäre Operatoren 259
26.2 Binäre Operatoren 260
26.3 Ein Beispiel 260
26.4 Beschränkungen 261
26.5 Richtlinien 262
27. Weitere Sprachdetails 263
27.1 Die Main-Funktion 263
27.2 Vorverarbeitung 265
27.3 Lexikalische Details 268
28. Freunde finden mit den .NET-Frameworks 273
28.1 Was alle Objekte tun 273
28.2 Hashes und GetHashCode() 276
29. System.Array und die Auflistungsklassen 281
29.1 Sortieren und Suchen 281
29.2 ICloneable 294
29.3 Entwurfsrichtlinien 296
30. Interoperabilität 299
30.1 Benutzen von COM-Objekten 299
30.2 Von COM-Objekten benutzt werden 299
30.3 Aufrufen systemeigener DLL-Funktionen 299
31. Überblick über die .NET-Frameworks 301
31.1 Numerische Formatierung 301
31.2 Formatierung von Datum und Uhrzeit 311
31.3 Benutzerdefinierte Objektformatierung 312
31.4 Numerische Syntaxanalyse 315
31.5 XML-Verwendung in C# 315
31.6 Eingabe/Ausgabe 315
31.7 Serialisierung 320
31.8 Threading 323
31.9 Lesen von Webseiten 325
32. C# im Detail 327
32.1 C#-Stil 327
32.2 Richtlinien für Bibliotheksautoren 328
32.3 Benennung von Klassen 329
32.4 Unsicherer Code 329
32.5 XML-Dokumentation 334
32.6 Speicherbereinigung in der .NET-Laufzeitumgebung 339
32.7 Weitergehende Reflektion 344
32.8 Optimierung 352
33. Defensive Programmierung 353
33.1 Bedingte Methoden 353
33.2 Debug- und Trace-Klassen 354
33.3 Assert-Anweisungen 355
33.4 Debug- und Trace-Ausgabe 356
33.5 Verwenden von Switch-Klassen zur Steuerung von Debug und Trace 357
33.6 BooleanSwitch 358
34. Die Befehlszeile 365
34.1 Einfache Verwendung 365
34.2 Antwortdateien 365
34.3 Befehlszeilenoptionen 365
35. C# im Vergleich zu anderen Sprachen 369
35.1 Unterschiede zwischen C# und C/C++ 369
35.2 Unterschiede zwischen C# und Java 372
35.3 Unterschiede zwischen C# und Visual Basic 6 381
35.4 Codeaussehen 381
35.5 Weitere .NET-Sprachen 387
36 C# und die Zukunft 389
Index 391