Teil IIIenth7lt einige n%tzliche Referenzen, darunter eine Zusammenfassung der Syntax von C#, die in der speziell f%r dieses Buch und C# Essentials entwickelten Notation vorgestellt wird
Trang 1IN A NUTSHELL
Trang 3IN A NUTSHELL
Beijing · Cambridge · Farnham · Köln · Paris · Sebastopol · Taipei · Tokyo
Peter Drayton, Ben Albahari & Ted Neward
Deutsche Übersetzung von Dorothea Reder & Jürgen Key
Trang 4Dennoch können Fehler nicht vollständig ausgeschlossen werden Verlag, Autoren und Übersetzer übernehmen keine juristische Verantwortung oder irgendeine Haftung für eventuell verbliebene Fehler und deren Folgen.
Alle Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt und sind möglicherweise eingetragene Warenzeichen Der Verlag richtet sich im wesentlichen nach den Schreibweisen der Hersteller Das Werk einschließlich aller seiner Teile ist urheber- rechtlich geschützt Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen Kommentare und Fragen können Sie gerne an uns richten:
Copyright der deutschen Ausgabe:
© 2003 by O’Reilly Verlag GmbH & Co KG
Die Originalausgabe erschien 2002 unter dem Titel
C# in a Nutshell im Verlag O’Reilly & Associates, Inc.
Die Darstellung eines Jungfernkranichs im Zusammenhang
mit dem Thema C# ist ein Warenzeichen von O’Reilly & Associates, Inc.
Microsoft, NET, Visual Basic NET, Visual Studio NET und Windows
sind geschützte Warenzeichen der Microsoft Corporation.
Bibliografische Information Der Deutschen Bibliothek
Die Deutsche Bibliothek verzeichnet diese Publikation in der
Deutschen Nationalbibliografie; detailierte bibliografische Daten
sind im Internet über http://dnb.ddb.de abrufbar.
Übersetzung und deutsche Bearbeitung: Dorothea Reder, Bornheim & Jürgen Key, Ilmenau Lektorat: Alexandra Follenius & Lars Schulten, Köln
Korrektorat: Friederike Daenecke, Zülpich
Fachgutachten: Uwe Komoss, Kaarst, Christian Pogea, Ulm & Sven Riedel, Clausthal
Satz: Frank Wassen, reemers publishing services, Krefeld; www.reemers.de
Umschlaggestaltung: Emma Colby, Pam Spremulli & Melanie Wang, Boston
Produktion: Geesche Kieckbusch, Köln
Belichtung, Druck und buchbinderische Verarbeitung:
Druckerei Kösel, Kempten; www.koeselbuch.de
ISBN 3-89721-299-4
Dieses Buch ist auf 100% chlorfrei gebleichtem Papier gedruckt.
Trang 5Vorwort xiii
Teil I: Programmieren mit C# 1
1: Einfhrung in C# und das NET Framework 3
Die Programmiersprache C# 4
Das NET Framework 7
ECMA-Standardisierung 11
2: Grundlagen von C# 14
Das erste C#-Programm 14
Bezeichner und Schl%sselw&rter 15
Grundlegendes zu den Typen 16
Werttypen und Referenztypen 19
Vordefinierte Typen 25
Arrays 30
Variablen und Parameter 32
Ausdr%cke und Operatoren 35
Anweisungen 38
Namensr7ume 46
3: Typ-Erzeugung in C# 49
Klassen 49
Vererbung 60
Zugriffsmodifikatoren 67
Structs 68
Interfaces 69
Enu ms 72
Trang 64: Fortgeschrittene C#-Features 75
Delegates 75
Delegates versus Funktionszeiger 77
Delegates versus Interfaces 77
Events 77
Operatoren %berladen 80
Try-Anweisungen und Exceptions 83
Attribute 87
Unsicherer Code und Zeiger 89
Pr7prozessordirektiven 92
XML-Dokumentation 93
Teil II: Programmieren mit dem NET Framework 101
5: berblick ber die Framework Class Library 103
Kerntypen 103
Text 104
Collections 104
Streams und I/O 104
Netzwerk-Programmierung 105
Threads 105
Sicherheit 105
Reflection und Metadaten 106
Assemblies 106
Serialisierung 106
Remoting 107
Web Services 107
Datenzugriff 108
XML 108
Grafik 108
Rich Client-Anwendungen 108
Web-basierte Anwendungen 109
Lokalisierung (Globalization) 109
Konfiguration 110
Advanced Component Services 110
Diagnose und Debugging 110
Zusammenarbeit mit unmanaged Code 110
Compiler- und Werkzeugunterst%tzung 111
Einrichten der Laufzeitumgebung 111
Native Betriebssystemf7higkeiten 111
Undokumentierte Typen 112
6: String-Verarbeitung 113
Die Klasse String 113
Die Klasse StringBuilder 116
Unterst%tzung f%r regul7re Ausdr%cke 116
Grundlagen regul7rer Ausdr%cke 118
Trang 7Prozedurale und ausdrucksbasierte Muster 121
Kochbuch f%r regul7re Ausdr%cke 122
7: Collections 126
Iterieren %ber Collections 126
Standard-Collection-Interfaces 131
Vordefinierte Collection-Klassen 132
Ordnen von Instanzen 135
Erzeugen von Hash-Werten 137
8: XML-I/O 139
Zugriff auf XML-Dokumente 139
Parsen eines XML-Streams 143
Knoten mit XPath ausw7hlen 143
Transformieren eines Dokuments mit XSLT 146
9: Netzwerk-Programmierung 149
Programmiermodelle f%r Netzwerke 149
Request/Response-Architektur 149
HTTP-spezifische Unterst%tzung 150
WebClient 151
Hinzuf%gen neuer Protokoll-Handler 151
Die Benutzung von TCP, UDP und Sockets 152
Die Benutzung des DNS 153
10: Streams und I/O 154
Streams und Speichermedien 154
Kapseln roher Streams 156
Verzeichnisse und Dateien 158
Isolierter Speicher 162
11: Serialisierung 165
Was ist Serialisierung? 165
Unterst%tzung der Serialisierung im NET Framework 166
Explizite Serialisierung 166
Implizite Serialisierung 167
[Serializable] 168
[NonSerialized] 169
IDeserializationCallback 169
ISerializable 170
[Serializable] und ISerializable 171
12: Assemblies 175
Elemente einer Assembly 175
Assemblies und Module 176
Sichtbarkeit von Typen und Typ-Referenzen 176
Benennen und Signieren von Assemblies 177
Trang 8Aufl&sen und Laden von Assemblies 179
Deployment 180
Rechte 180
13: Reflection 182
Typ-Hierarchie 182
Typen, Member und eingebettete Typen 183
Den Typ einer Instanz ermitteln 184
Direkter Zugriff auf einen Typ 184
Reflection %ber eine Typ-Hierarchie 185
Sp7te Bindung 186
Fortgeschrittene Benutzung von Reflection 188
Erzeugung neuer Typen zur Laufzeit 189
14: Benutzerdefinierte Attribute 191
Sprachunterst%tzung 191
Compiler-Unterst%tzung 192
Laufzeitunterst%tzung 192
Vordefinierte Attribute 193
Definieren eines neuen benutzerdefinierten Attributs 195
Abfragen eines benutzerdefinierten Typs zur Laufzeit 196
15: Speichermanagement 198
Der Garbage Collector 198
Optimierungstechniken 199
Finalizer 200
Die Methoden Dispose und Close 201
16: Threads 203
Thread-Synchronisierung 203
Verbreitete Thread-Typen 206
Asynchrone Delegates 207
17: Integration nativer DLLs 209
Aufrufe in DLLs 209
Das Marshaling einfacher Typen 210
Marshaling von Klassen und Structs 211
In- und Out-Marshaling 212
Callbacks von unmanaged Code 212
Simulieren einer C-Union 213
Structs auf ein Bin7r-Format abbilden 215
Vordefinierte Attribute f%r DLLs 216
18: Integration von COM-Komponenten 220
Binden von COM- und C#-Objekten 220
COM-Objekte f%r C# zur Verf%gung stellen 220
C#-Objekte f%r COM zur Verf%gung stellen 221
Trang 9COM-Abbildung in C# 222
Attribute f%r die Zusammenarbeit mit COM 223
Unterst%tzung von COM+ 223
19: Diagnose 226
Unterst%tzung f%r Logging und Assertions 226
Bedingte Kompilierung 228
Debugger-Integration 229
Prozesse, Threads und Stacks 230
Event-Logs 232
Performance-Counter 235
Teil III: Sprach- und Tool-Referenz 239
20: C#-Sprachreferenz 241
21: Referenz zu XML-Dokumentations-Tags 249
22: Namens- und Programmierkonventionen in C# 253
Groß-/Kleinschreibung 253
Mechanismen 255
Wortwahl 256
Namensr7ume 257
23: C#-Entwicklungswerkzeuge 259
Teil IV: API-Schnellreferenz 295
24: So verwenden Sie diese Schnellreferenz 297
Finden eines Eintrages in der Schnellreferenz 297
Wie Sie einen Eintrag der Schnellreferenz lesen sollten 298
25: Microsoft.Win32 303
26: System 313
27: System.Collections 419
28: System.Collections.Specialized 436
29: System.Diagnostics 445
Trang 1030: System.Globalization 487
31: System.IO 508
32: System.IO.IsolatedStorage 538
33: System.Net 544
34: System.Net.Sockets 575
35: System.Reflection 589
36: System.Reflection.Emit 630
37: System.Runtime.InteropServices 661
38: System.Runtime.Serialization 690
39: System.Runtime.Serialization.Formatters 702
40: System.Text 707
41: System.Text.RegularExpressions 715
42: System.Threading 723
43: System.Timers 743
44: System.Xml 746
45: System.Xml.XPath 784
46: System.Xml.Xsl 792
Teil V: Anh@nge 797
A: Regul@re Ausdrcke 799
B: Formatangaben 804
Trang 11C: Marshaling von Daten 810 D: SchlsselwArter in C# 812 E: Namensr@ume und Assemblies 817 F: Index zu den Typen, Methoden,
Eigenschaften, Events und Feldern 823 Index 873
Trang 13Dieses Buch ist eine Schnellreferenz zu der neuen Programmiersprache C# von Microsoft Essoll neben dem Computer und auf Reisen Ihr treuer Begleiter sein und Sie beim Programmie-ren unterst%tzen Die erste Version von C# wurde nach einer umfangreichen Beta-Testphase
im Januar 2002 als Teil von Visual Studio NET und des NET Framework ver&ffentlicht.C# in a Nutshell ist in vier Teile (und sechs Anh7nge) aufgeteilt Teil I ist eine Einf%hrung indie Programmiersprache C# und die NET Common Language Runtime (CLR) OhneUmschweife werden Sie schnell mit der Programmiersprache C# vertraut gemacht, angefangenbei ihren Datentypen bis hin zu allen Anweisungen und Features, die diese moderne, kompo-nentenorientierte Sprache auszeichnen
In Teil II sehen Sie, wie Sie C# zusammen mit den wichtigsten Klassen der NET FrameworkClass Library (FCL) einsetzen, um eine Reihe von h7ufigen Programmieraufgaben zu l&sen,von der String-Verarbeitung bis hin zur Interaktion mit Legacy-COM-Komponenten Teil IIIenth7lt einige n%tzliche Referenzen, darunter eine Zusammenfassung der Syntax von C#, die
in der speziell f%r dieses Buch und C# Essentials entwickelten Notation vorgestellt wird, sowieeine Referenz zu n%tzlichen Kommandozeilen-Tools, die mit Visual Studio NET und dem.NET Framework mitgeliefert werden
Teil IV ist eine Schnellreferenz zu den 21 wichtigsten Namensr7umen der FCL und ihren mehrals 700 Typen, komplett mit Namensraum-Karten, Typbeschreibungen, Member-Signaturenund n%tzlichen Querverweisen und Kommentaren Oberdies bietet dieses Buch einen IndexzuKlassen und Methoden, in dem Sie den Typ zueinem bestimmten Member oder denNamensraum zu einem bestimmten Typ nachschlagen k&nnen
Zielgruppe dieses Buches
Wenn Sie als C#-Programmierer t7tig sind, dann geh&rt C# in a Nutshell unabh7ngig vonIhrem gegenw7rtigen Erfahrungsstand auf jeden Fall in Ihre Referenzbibliothek Die gr%ndli-che Beschreibung der Sprachelemente, die kompakte Sprach- und Tool-Referenz und der ein-
Trang 14zigartige, prall gef%llte Leitfaden durch die Core-APIs der FCL helfen Ihnen, m%helos ten auf die meisten Fragen zu Syntax und Funktionalit7t zu finden, denen Sie bei Ihrer Arbeitbegegnen werden.
Antwor-Wenn Sie bereits Erfahrung in der Programmierung mit Java, C++ oder Visual Basic haben,aber zum erstenmal mit C# und der CLR zu tun haben, hilft Ihnen dieses Buch, die Grundlagenvon C# rasch zumeistern Unerfahrene Programmierer sollten jedoch vorher ein Einf%hrungs-buch lesen, z.B Programmieren mit C# von Jesse Liberty (erschienen im O’Reilly Verlag)
Inhalt dieses Buches
In den Teilen I, II und III dieses Buches werden C#, die NET CLR und wichtige Toolsbeschrieben, die mit dem SDK zum NET Framework heruntergeladen werden Teil I, Pro-grammieren mit C#, ist eine Einf%hrung in die Programmiersprache C# und das NET Frame-work:
Kapitel 1, Einf$hrung in C# und das NET Framework
Kapitel 1 gibt einen Oberblick %ber die Programmiersprache C# und das NET work mit besonderem Schwerpunkt auf den wichtigsten Features und Vorteilen dieserTechnologien
Frame-Kapitel 2, Grundlagen von C#
In diesem Kapitel werden die Elemente der Programmiersprache C# eingef%hrt, darunterdie Datentypen und elementare Konstrukte wie z.B Ausdr%cke und Anweisungen Imgesamten Kapitel wird eine Spezialnotation verwendet, um die Syntaxregeln von C# sozusammenzufassen, daß sie sp7ter leicht nachgeschlagen werden k&nnen
Kapitel 3, Typ-Erzeugung in C#
In Kapitel 3 wird beschrieben, wie Sie in C# neue Typen definieren und instantiieren InC# sind alle Klassen zugleich Komponenten, die sowohl den ausf%hrbaren Code als auchdie Metadaten verk&rpern, die von der CLR zur Laufzeit verwendet werden
Kapitel 4, Fortgeschrittene C#-Features
Dieses Kapitel erl7utert Features von C#, die f%r die Behandlung von Events und tions, Callbacks, benutzerdefinierten Attributen und anderem mehr zust7ndig sind.Der Teil II, Programmieren mit dem NET Framework, behandelt folgende Themen:
Excep-Kapitel 5, /berblick $ber die Framework Class Library
Kapitel 5 gibt einen Oberblick %ber die Kern-APIs des NET Framework, soweit sie in sem Buch behandelt werden Die APIs selbst werden in Teil IV beschrieben Im vorlie-genden Kapitel wird zusammengefaßt, welche Unterst%tzung die einzelnen funktionalenBereiche der FCL bieten Außerdem sind hier die Namensr7ume aufgelistet, zu denen diejeweiligen Typen geh&ren
die-Kapitel 6, String-Verarbeitung
In diesem Kapitel werden die Typen der FCL beschrieben, die f%r die String-Verarbeitung
am wichtigsten sind, und es wird gezeigt, wie Sie diese Typen in C# einsetzen Die FCLstellt eine breite Palette von Features f%r die fortgeschrittene String-Verarbeitung zur Ver-f%gung Außerdem werden die FCL-Typen f%r das Suchen und Ersetzen mit regul7renAusdr%cken erkl7rt, die auf den regul7ren Ausdr%cken von Perl 5 beruhen
Trang 15Kapitel 7, Collections
Kapitel 7 stellt die wichtigsten FCL-Typen f%r die Arbeit mit gebr7uchlichen ren wie Arrays, Hashtables, W&rterb%chern, Stacks und dergleichen vor Außerdem wer-den wichtige Collection-Interfaces wie IEnumerable, ICollection und IComparable be-schrieben
Datenstruktu-Kapitel 8, XML-I/O
In diesem Kapitel wird die integrierte XML-Unterst%tzung der FCL beschrieben, dieZusammenh7nge zwischen XML und dem I/O-System im allgemeinen erkl7rt, die Nut-zung und Erstellung von XML-Dokumenten in knotenbasierten und Infoset-basiertenFormularen behandelt sowie der Einsatz von XPath erl7utert und XSLT vorgestellt.Kapitel 9, Netzwerk-Programmierung
Die FCL enth7lt eine Reihe von Typen, die den Zugriff auf Netzwerkressourcen chen Kapitel 9 beschreibt den Kern der FCL-Netzwerkunterst%tzung und gibt eine Viel-zahl von Beispielen f%r die Nutzung der vordefinierten Klassen
vereinfa-Kapitel 10, Streams und I/O
Dieses Kapitel f%hrt in die integrierte FCL-Unterst%tzung f%r die Behandlung von Streamsund I/O ein, erkl7rt die Zusammenh7nge zwischen den abstrakten und konkreten Klas-sen der Stream-Architektur, zeigt, wie diese Klassen eingesetzt werden, und erl7utert diespezifische Unterst%tzung f%r bestimmte Dateisysteme
Kapitel 11, Serialisierung
Kapitel 11 gibt eine Einf%hrung in die integrierte Unterst%tzung f%r Objektserialisierungund -deserialisierung und zeigt, wie Clients und Objekte an dem Prozeß der Serialisie-rung und Deserialisierung teilnehmen k&nnen
Kapitel 12, Assemblies
Dieses Kapitel erkl7rt die Konfiguration und Nutzung von Assemblies, der den Einheit f%r die Weitergabe von Anwendungen in NET Ebenfalls erl7utert werdendie FCL-Attribute und -Typen zur Verwaltung von Assemblies
grundlegen-Kapitel 13, Reflection
Kapitel 13 beschreibt die wichtigsten FCL-Typen zur Untersuchung der Metadaten handener Typen mit Hilfe von Reflection Die Erstellung neuer Typen (und der damitverbundenen Metadaten) nennt sichReflection.Emitund wird mit den Typen aus demNamensraum System.Reflection.Emit vorgenommen, der ebenfalls in diesem Kapitelbehandelt wird
vor-Kapitel 14, Benutzerdefinierte Attribute
Typen, Member, Module und Assemblies haben allesamt Metadaten, die von allen gen CLR-Diensten genutzt werden Diese Metadaten gelten als integraler Bestandteileiner Anwendung und lassen sich mittels Reflection (siehe Kapitel 13, Reflection)betrachten Dieses Kapitel erkl7rt, wie Sie Anwendungselementen benutzerdefinierteMetadaten hinzuf%gen, indem Sie eigene Attribute entwerfen
wichti-Kapitel 15, Speichermanagement
Das NET Framework bietet eine automatische Garbage Collection f%r Typen, die nichtmehr benutzt werden, und erm&glicht es den Programmierern, %ber C#-Destruktorenauch eigene Finalizer zur Verf%gung zu stellen Außerdem zeigt dieses Kapitel, wie Siemit Dispose()- oder Close()-Methoden hinter einem Objekt aufr7umen, dessen Arbeitbeendet ist
Trang 16Kapitel 16, Threads
Kapitel 16 erkl7rt die Verwendung der FCL-Typen zur Verwaltung von Threads In C# gibt es einelock-Anweisung, mit der Sie den Zugriff auf gemeinsame Res-sourcen synchronisieren; und in der FCL gibt es die KlasseMonitor, mit der Siepulse- u nd
Anwendungs-wait-,atomic- und andere Thread-Operationen implementieren
Kapitel 17, Integration nativer DLLs
Dieses Kapitel erkl7rt die PInvoke-Dienste, %ber die C#-Programme mit Legacy-DLLsinteragieren
Kapitel 18, Integration von COM-Komponenten
Kapitel 18 beschreibt die FCL-Typen und -Attribute, mit denen COM-Objekte f%r gramme und C#-Objekte f%r COM verf%gbar werden
Mel-Teil III, Sprach- und Tool-Referenz, behandelt folgende Themen:
Kapitel 20, C#-Sprachreferenz
Kapitel 20 enth7lt eine kurze alphabetische Auflistung aller Sprachkonstrukte von C# undihrer jeweiligen Syntax
Kapitel 21, Referenz zu XML-Dokumentations-Tags
C# stellt XML-Dokumentations-Tags zur Verf%gung, die es Ihnen leichtmachen, eineAnwendungsdokumentation direkt mit dem Quellcode zu erstellen In diesem Kapitelwerden die entsprechenden Tags sowie ihre Verwendung vorgestellt
Kapitel 22, Namens- und Programmierkonventionen in C#
Kapitel 22 schl7gt Richtlinien f%r die Namensgebung sowie f%r die Groß- und schreibung von C#-Programmierkonstrukten vor Diese Richtlinien wurden anhand deroffiziellen Microsoft-Dokumente und der Erfahrungen der Autoren dieses Buchs erarbei-tet
Klein-Kapitel 23, C#-Entwicklungswerkzeuge
Dieses Kapitel ist eine Referenz zu n%tzlichen Kommandozeilen-Tools, die mit Visual dio NET und dem NET Framework ausgeliefert werden Dazu geh&ren auch der Compi-ler und der Debugger
Stu-Die 23 Kapitel der Teile I bis III von C# in a Nutshell machen Sie mit C# und vielen wichtigenAPIs des NET Framework vertraut Die zweite H7lfte des Buchs ist der Teil IV, die API-Schnellreferenz Diese ist eine knappe, aber detaillierte API-Referenz zu21 wichtigen Namens-r7umen und mehr als 700 Kerntypen einschließlich ihrer Member Bitte lesen Sie hierzu aufjeden Fall Kapitel 24, So verwenden Sie diese Schnellreferenz, am Anfang von Teil IV, in demerkl7rt wird, wie Sie aus der Referenz den gr&ßtm&glichen Nutzen ziehen
Teil V, Anh?nge, enth7lt zus7tzliche Referenztabellen, darunter die Syntax von regul7ren dr%cken (Anhang A, Regul?re Ausdr$cke), Formatangaben (Anhang B, Formatangaben), stan-dardm7ßige Datenzuordnung von C# zu COM (Anhang C, Marshaling von Daten), ein Glossar
Trang 17Aus-der C#-Schl%sselw&rter (Anhang D, Schl$sselw@rter in C#), eine alphabetische Liste Aus-der Namensr7ume und der DLLs, die diese Namensr7ume enthalten (Anhang E, Namensr?umeund Assemblies), sowie einen Index der Typen und Member, in dem Sie Methoden oder Fel-der nachschlagen k&nnen, um zu sehen, mit welchem Typ sie definiert sind.
.NET-Voraussetzungen fr dieses Buch
Um mit C# zu programmieren, m%ssen Sie zun7chst eine der vielen Editionen von Visual dio NET auf Ihrem System installiert haben (Standard, Professional, Enterprise oder Architect)oder das NET Framework SDK heruntergeladen und eingerichtet haben Visual Studio stellteine umfangreiche interaktive Entwicklungsumgebung zur Verf%gung, die viele Aufgaben derC#-Programmierung erleichtert, vor allem die Entwicklung von Windows-Clients, serverseiti-gen Webanwendungen und Web Services Außerdem bietet Visual Studio eine hervorragendeUnterst%tzung f%r das Debugging und das Projektmanagment von Anwendungen
Stu-Wenn Sie das NET Framework SDK auf Ihrem System installiert haben, k&nnen Sie allerdingsauch mit einem einfachen Editor wie z.B emacs, SharpDevelop oder Microsoft Notepad dieC#-Programme schreiben und sie mit den in Kapitel 23, C#-Entwicklungswerkzeuge, beschrie-benen Kommandozeilen-Tools debuggen und ausf%hren
Um das NET Framework SDK (gegenw7rtig eine 131-MByte-Datei) herunterzuladen, gehenSie zu http://msdn.microsoft.com/net
Wenn dieses Buch in die Regale der Buchh7ndler gelangt, d%rfte es jedoch auch bereits lich sein, das NET Framework SDK auf CD zu erwerben
m&g-Konventionen
In diesem Buch gelten die folgenden typographischen Konventionen
Kursiv wird verwendet f%r:
· Verzeichnispfade und Dateinamen
· Domain-Namen und URLs
· Neue Begriffe, die definiert werden
Nichtproportionalschriftwird verwendet f%r:
· Codebeispiele und Ausgaben
· Namen und Schl%sselw&rter in C#-Programmen, einschließlich Methoden- oder namen, Variablennamen und Klassennamen
Feld-· XML- und HTML-Element-Tags
· Registry-Schl%ssel
Nichtproportionalschrift kursivwird verwendet f%r:
· Parameternamen oder Platzhalter, die im Programm durch einen tats7chlichen Wertersetzt werden
Trang 18An mehreren Stellen in diesem Buch finden Sie einfache Grammatikangaben zu vielen, abernicht allen in diesem Buch eingef%hrten Sprachkonstrukten So k&nnen Sie die Grammatikeines bestimmten Konstrukts und seine zul7ssigen Kombinationsm&glichkeiten schnell %ber-blicken In der Syntax dieser Grammatik wird mit den XML-H7ufigkeitsoperatoren (?,*und+)konkreter angegeben, wie oft ein Element in einem bestimmten Konstrukt auftreten kann:
x Zeigt an, daß x w&rtlich verwendet werden soll (Nichtproportionalschrift)
x Zeigt an, daß der Programmierer f%r x einen entsprechenden Wert einsetzt (tionalschrift Kursiv)
Nichtpropor-x? Zeigt an, daß x null oder einmal auftreten kann
x* Zeigt an, daß x null Mal oder mehrmals (durch Kommata getrennt) auftreten kann
x+ Zeigt an, daß x einmal oder mehrmals (durch Kommata getrennt) auftreten kann
[ ]
Zeigt eine logische Zusammenfassung von Codeelementen an, soweit diese nicht implizitmit{},()oder[]zusammengefaßt sind
[x|y]
Zeigt an, daß nur ein Element aus einer Auswahl von Codeelementen auftreten darf
Dieses Icon zeigt einen Hinweis an, also eine wichtige Nebenbemerkung zumText
Weitere Literatur zu diesem Thema
O’Reilly & Associates und der O’Reilly Verlag verlegen eine ganze Reihe von B%chern %ber C#und NET, darunter auch mehrere erg7nzende B%cher zu dem vorliegenden Band Empfehlens-wert sind aus der NET-Reihe von O’Reilly unter anderem:
· Programmieren mit C# von Jesse Liberty
· NET Framework Essentials, Second Edition, von Thuan Thai und Hoang Q Lam
· VB.NET Language in a Nutshell, Second Edition, von Steven Roman, Ron Petrusha undPaul Lomax
· Programming Visual Basic NET von Dave Grundgeiger
· Programming ASP.NET von Jesse Liberty und Dan Hurwitz
· C# and VB.NET Conversion Pocket Reference von Jose Mojica
Eine vollst7ndige Liste der NET-B%cher von O’Reilly und anderer Titel zu Programmierthemenfinden Sie unter http://dotnet.oreilly.com
Außerdem empfehlen wir C# Primer: A Practical Approach, von Stanley B Lippman(Addison-Wesley Professional) und Effektiv Java programmieren von Joshua Bloch (auch f%rC#-Programmierer exzellent geeignet)
Trang 19Online-Ressourcen zu C#
Auch dieses Buch kann nicht alle Fragen beantworten, die Sie zu C# vielleicht haben Es gibtviele Online-Ressourcen, die Ihnen helfen, das Beste aus C# herauszuholen Folgende Web-sites sind zuempfehlen:
http://msdn.microsoft.com/net
Das Microsoft NET Developer Center ist die offizielle Website f%r alles, was mit NET zutun hat, einschließlich der neuesten Version des NET Framework SDK, der Dokumenta-tion, technischer Fachartikel, Beispielcode, Hinweise auf Diskussionsgruppen und Res-sourcen von Fremdherstellern
http://www.gotdotnet.com
Die Support-Seite des NET Framework-Teams f%r die Programmierergemeinde Hierfinden Sie Artikel, Spezifikationen und viele Beispiele, sowohl aus dem NET Frame-work-Team als auch von der Programmierergemeinde insgesamt
http://discuss.develop.com/dotnet.html
Die Diskussionsliste von DevelopMentor DOTNET ist der beste Ort f%r eine gige, offene Diskussion %ber das NET Framework Teilnehmer sind nicht selten hochste-hende Ingenieure und Programm-Manager von Microsoft
http://msdn.microsoft.com/community/net.asp
Eine Liste von Ressourcen der Fremdhersteller f%r C#- und NET Framework-Entwickler
Es gibt auch im Usenet Diskussionen %ber NET, und zwar in der Newsgruppenfamilie soft.public.dotnet.* Außerdem k%mmert sich die Newsgruppe microsoft.public.dotnet.langua-ges.csharp speziell um C# Wenn Ihr News-Server diese Gruppen nicht anbietet, finden Sie sieunter news://msnews.microsoft.com
micro-Abschließend seien noch zwei interessante Artikel erw7hnt:
Trang 20So wurde die Schnellreferenz generiert
Teil IV, die API-Schnellreferenz, wurde mit Hilfe der Reflection-API von NET generiert (die inKapitel 13, Reflection, genauer beschrieben ist) Mit Reflection nahmen wir bestimmte Klassen,Structs, Enums, Delegates und Interfaces der Framework Class Library unter die Lupe undextrahierten detaillierte Informationen %ber jeden Typ und seine Member Danach strukturier-ten wir diese Informationen als DocBook XML, und aus diesem Format haben wir die Druck-version erstellt
Jedes angegebene Typlisting wird von einem oder mehreren Abs7tzen begleitet, die den Typund seine wichtigsten Member beschreiben Diese Beschreibungen geben einen Oberblickdar%ber, wie Sie den Typ in Ihren eigenen Anwendungen nutzen k&nnen, und beschreibenverwandte Typen, Fallstricke und n%tzliche Features
Brad Merrill von Microsoft schrieb die Abschnitte %ber regul7re Ausdr%cke und lieferte denInhalt f%r Anhang A, Regul?re Ausdr$cke
Brad Abrams und Mitarbeiter aus seinem NET Framework-Team trugen zum Entwurf der Referenz bei und verbesserten sie durch ihr Fachlektorat ganz entscheident Weitere techni-sche Gutachter waren Joe Nalewabau und Kerry Loynd von Microsoft
API-Peter Drayton
In erster Linie danke ich meiner Frau Julie DuBois, die es immer wieder schafft, daß die Tage,die ich ohne NET verbringe, sogar noch sch&ner sind als die, die ich mit NET verbringe.Außerdem danke ich Ben Albahari daf%r, daß er den Materialberg zu C# und NET schon zumzweiten Mal in weniger als anderthalb Jahren mit mir bew7ltigt hat; ich danke Ted Neward,der als Kavallerie immer zur rechten Zeit kam und aus der zweiten H7lfte des Buchs das Best-m&gliche machte, und Brian Jepson, Nancy Kotary sowie John Osborn f%r ihre unerm%dlicheHilfe und Arbeit (sowohl als Verleger als auch in anderer Hinsicht)
Wenn man den Bogen noch etwas weiter spannt, so wurden die Beitr7ge in diesem Buchauch durch Kommentare und Anregungen von Simon Fell, Don Box, Brock Allen und all denanderen klugen und talentierten DevelopMentor-Lehrern, deren Kollege zu sein ich das Gl%ckhabe, um ein Vielfaches besser
Ich widme dieses Buch meinem Vater Peter Drayton Senior und meiner Mutter Irene MaryRochford Drayton, die mir alles mitgaben, um durch die F7hrnisse des Lebens zu steuern
Trang 21Ben Albahari
Ich danke zun7chst Peter Drayton, der mich bat, an diesem Buch mitzuarbeiten, und der michregelm7ßig mit seiner Begeisterung mitzieht; den Lektoren von O’Reilly (Brian Jepson, NancyKotary und John Osborn) f%r ihren Einsatz und die Geduld, die notwendig war, um diesesProjekt zum Abschluß zu bringen; Ted Neward, der zu uns stieß, als wir den schwierigstenTeil des Buchs in Angriff nahmen; und meiner Freundin Karen, die mich mit einer Mischungaus Liebe und Logik motiviert hat
Ted Neward
Zuallererst danke ich Peter Drayton, der mich einlud (oder n&tigte?), bei diesem Projekt arbeiten Es hat Spaß gemacht, mit ihm und Ben Albahari an einem Buch zu arbeiten, das, wieich hoffe, f%r Tausende von abtr%nnigen C++-, Java- und VB-Programmierern, die zu dieserneuen Sprache wechseln, von Nutzen sein wird Zweitens danke ich dem Team von O’Reilly,das meine erste Zusammenarbeit mit O’Reilly zu einer wunderbaren Erfahrung machte Drit-tens gilt mein Dank meinen jetzigen und ehemaligen Studenten, die meine Versuche, ihnenC# beizubringen, mit Fragen, Diskussionen und Lachen (vielleicht etwas hysterischem Lachen)begleiteten Viertens danke ich Don Box und Mike Abercrombie f%r DevelopMentor und dieherrliche Arbeitsatmosph7re, die sie dort schufen und an der ich teilhaben durfte Und last butnot least danke ich meiner wunderbaren Familie: Meiner Frau Charlotte und meinen S&hnenMichael und Matthew, die ihren Papa gern haben, auch wenn er manchmal f%r eine Weile imArbeitszimmer verschwindet
mitzu-Auch Ihnen, werter Leser, danke ich, da Sie sich die Zeit nehmen, unser Buch im RahmenIhrer Besch7ftigung mit C# zu lesen Ich hoffe, daß Ihre Bem%hungen insofern Fr%chte tragen,als Sie durch unser Buch schneller lernen und mehr Zeit mit Ihrer Familie und Ihren Freundenverbringen k&nnen Auch wenn es banal klingen mag: In dieser »neuen Zeit«, in der wir leben,sind solche Kontakte mit Gold nicht aufzuwiegen Und deshalb gehe ich jetzt mit meiner Fami-lie Pizza essen
Trang 23TEIL I
Programmieren mit C#
Trang 25KAPITEL 1
Einfhrung in C# und das NET
Framework
Die neue Programmiersprache C# wurde von Microsoft speziell fr das NET
Frameworkent-wickelt Das NET Framework ist eine Laufzeitumgebung und Klassenbibliothek, die die
Ent-wicklung und den Einsatz moderner, komponentenbasierter Anwendungen massiv erleichtert
Als im Januar 2002 die endgltige Version des NET Frameworkund der Programmiersprache
C# ausgeliefert wurde, hatten sowohl die Plattform als auch die Programmiersprache bereits
die Aufmerksamkeit der Industrie auf sich gezogen und wurden von der Avantgarde der
Microsoft-Nutzer auf breiter Front eingesetzt Wie kommt es zu diesem Erfolg? Gewiß, C# und
das NET Framework l0sen viele technische Probleme, mit denen Entwickler heutzutage
kon-frontiert sind, wenn sie versuchen, immer komplexere verteilte Systeme in immer krzerer
Zeit mit immer weniger Teamkollegen zu erstellen
Neben den technischen Vorzgen ist jedoch der Hauptgrund dafr, daß C# und das NET
Frame-workso beliebt sind, die bisher beispiellose Offenheit, die Microsoft an den Tag legt Von Juli
2000 bis Januar 2002 wurde das NET Framework0ffentlich umfangreich beta-getestet, so daß
Zehntausende von Entwicklern die neue Entwicklungsumgebung einer »Nagelprobe«
unterzie-hen konnten So konnte Microsoft von den Erfahrungen und dem Feedback der
Entwicklerge-meinschaft profitieren, ehe die neue Plattform endgltig fertiggestellt wurde
Außerdem wurden die wichtigsten Spezifikationen fr die Programmiersprache und die
Platt-form von der internationalen Standardisierungsorganisation European Computer
Manufactu-rers Association (ECMA) ver0ffentlicht, begutachtet und abgesegnet Diese
Standardisierungs-bemhungen veranlaßten viele andere Hersteller, C# und die NET-Plattform auf andere als
Microsoft-Umgebungen zu portieren Auch im akademischen Bereich ist das Interesse an
Microsoft-Technologien fr Forschung und Lehre wieder erwacht
Obwohl C# und NET zun?chst ganz neu aussehen, beruhen sie auf der soliden Grundlage
einer langj?hrigen Entwicklungsarbeit Wenn Sie wissen, wo die Sprache und die Plattform
herkommen, dann verstehen Sie besser, wohin die Reise geht
Trang 26Die Programmiersprache C#
Die ersten Berichte ber eine neue Programmiersprache von Microsoft stammen aus dem Jahr
1998 Seinerzeit hieß die Sprache noch COOL und galt als sehr Java-?hnlich Obwohl Microsofthartn?ckig dementierte, eine neue Sprache zu entwickeln, hielten sich die Gerchte
Im Juni 2000 beendete Microsoft die Spekulationen und ver0ffentlichte die Spezifikationen freine neue Programmiersprache namens C# (englisch »ssie-sharp« ausgesprochen) Kurzdanach wurde die Vorabversion des NET FrameworkSDK ver0ffentlicht (die auch einen C#-Compiler enthielt) Dies geschah auf der July2000 Professional Developer’s Conference (PDC)
in Orlando, Florida
Die Sch0pfer der neuen Sprache waren Anders Hejlsberg (der Entwickler von Turbo Pascalund Architekt von Delphi), Scott Wiltamuth und Peter Golde Die C# Language Specificationbeschreibt C# als eine » einfache, moderne, objektorientierte und typsichere Programmier-sprache, die von C und C++ abstammt« Die Syntax von C# hat viel Ehnlichkeit mit der Syntaxvon C++ und Java
Betrachtete man nur die syntaktischen Fbereinstimmungen zwischen C# und Java, so wrdeman C# jedoch Unrecht tun In der Semantiktreibt C# den Sprachentwurf weit ber das hin-aus, was Java im Jahre 2001 darstellte, und kann zu Recht als der n?chste Schritt in der Ent-wicklung komponentenorientierter Programmiersprachen betrachtet werden Ein detaillierterVergleich zwischen C# und Java wrde zwar den Rahmen dieses Buches sprengen, aber inter-essierten Lesern sei die Lektre des vielzitierten Artikels »A Comparative Overview of C# andJava« von Ben Albahari, dem Co-Autor dieses Buchs, unter http://genamics.com/developer/csharp_comparative.htm empfohlen
Komponentenbasierte Software-Entwicklung
In den letzten zehn Jahren haben Programmiertechniken wie objektorientiertes Design, dieInterface-basierte Programmierung und komponentenbasierte Software berall Einzug gehal-ten Doch die Untersttzung, die Programmiersprachen fr solche Techniken boten, hinktedem aktuellen Stand der Dinge immer hinterher Daher sttzen sich die Programmierer entwe-der auf Programmierkonventionen und selbstgeschriebenen Code statt auf eine unmittelbareUntersttzung durch den Compiler und die Laufzeitumgebung, oder sie nutzen die modernenTechniken berhaupt nicht
C++ beispielsweise untersttzte zwar die Objektorientierung, hatte aber kein formales zept von Interfaces So mußten die C++-Entwickler auf abstrakte Basisklassen und Mixin-Inter-faces zurckgreifen, um eine Interface-basierte Programmierung zu simulieren, und aufexterne Modelle der Komponentenprogrammierung wie z.B COM oder CORBA, um die Vor-teile komponentenbasierter Software nutzen zu k0nnen
Kon-Java erweiterte zwar den Ansatz von C++ unter anderem um eine Untersttzung von Interfacesund Packages, bot aber auf der Sprachebene keine ausreichende Untersttzung fr die Erstel-lung langlebiger, komponentenbasierter Systeme (In solchen Systemen mssen ber langeZeitr?ume hinweg Komponenten aus unterschiedlichen Quellen entwickelt, miteinander ver-bunden, weitergegeben und versioniert werden.) Nicht daß die Java-Gemeinschaft nicht vielesolcher Systeme geschaffen h?tte, aber die entsprechenden Bedrfnisse wurden nicht auf derSprachebene, sondern mittels Konventionen und selbstgeschriebenem Code gedeckt: Mansttzte sich auf Namenskonventionen, um gebr?uchliche Entwurfsmuster wie z.B Eigenschaf-
Trang 27ten und Events zu identifizieren, man ben0tigte fr die Weitergabe-Informationen externe
Metadaten, und man entwickelte benutzerdefinierte Class Loader, um eine strengere
Ver-sionierungssemantikfr die Komponenten zu erzielen
Bei der Entwicklung von C# hingegen stand von Anfang an die Tatsache im Mittelpunkt, daß
moderne Systeme aus Komponenten errichtet werden Daher bietet C# eine unmittelbare
Sprachuntersttzung fr gebr?uchliche Komponentenkonstrukte wie z.B Eigenschaften,
Methoden und Events (die von RAD-Tools dazu genutzt werden, um Anwendungen aus
Kom-ponenten aufzubauen, Eigenschaften zu setzen, auf Events zu reagieren und die
Komponen-ten durch Methodenaufrufe miteinander zu verbinden) Außerdem k0nnen Entwickler mit C#
die Typinformationen einer Komponente unmittelbar kommentieren und erweitern, um eine
Weitergabe-, Entwurfs- oder Laufzeituntersttzung zu gew?hrleisten, die Versionierung der
Komponenten direkt in das Programmiermodell zu integrieren oder eine XML-Dokumentation
unmittelbar in die C#-Quelldateien einzubinden Darber hinaus macht C# Schluß mit der
Unart von C++ und COM, Quelldateien ber die Header-Dateien, Implementierungsdateien
und Typbibliotheken zu verteilen, und verwendet statt dessen ein viel einfacheres Modell zur
Organisation des Quellcodes und fr die Wiederverwendung der Komponenten
Und dies sind noch nicht alle Vorteile von C#, das sich durch seine Verbesserungen gegenber
Java und C++ als neuer Meilenstein in der Entwicklung komponentenbasierter Sprachen
aus-zeichnet
Eine moderne objektorientierte Sprache
C# bietet nicht nur eine integrierte Untersttzung fr die Erstellung komponentenbasierter
Systeme, sondern ist eine leistungsf?hige objektorientierte Sprache Es untersttzt alle
wichti-gen Konzepte und Abstraktionen, die auch in Sprachen wie C++ und Java vorhanden sind
Wie man es von jeder modernen objektorientierten Sprache erwarten kann, untersttzt C#
auch Vererbung, Kapselung, Polymorphismus, Interface-basierte Programmierung und
ge-br?uchliche Konstrukte der Programmiersprachen C, C++ und Java, darunter Klassen, Structs,
Interfaces, Enums sowie neuere Konstrukte wie Delegates, die ein typsicheres Equivalent zu
den Funktionszeigern von C und C++ darstellen, sowie benutzerdefinierte Attribute, mit denen
Sie Codeelementen Zusatzinformationen mitgeben k0nnen
Fberdies hat C# auch Funktionen von C++, die in Java noch fehlen, darunter das Fberladen
von Operatoren, benutzerdefinierte Konvertierungen, echte rechteckige Arrays und eine
Semantikfr die Parameterbergabe by value
Im Gegensatz zu den meisten anderen Programmiersprachen hat C# keine eigene
Laufzeit-bibliothek, sondern sttzt sich auf die gewaltige Klassenbibliothek des NET Framework, die
fr alle Bedrfnisse das Richtige bietet, einschließlich Konsolen-I/O, Umgang mit Netzwerken
und Dateien, Collection-Datenstrukturen und vieles andere Diese Klassenbibliothek, die
haupts?chlich in C# geschrieben wurde und mehr als eine Million Codezeilen umfaßt, war fr
den Entwicklungszyklus der Sprache C# und des C#-Compilers der ultimative H?rtetest
C# bemht sich, Konsistenz und Effizienz gegeneinander abzuw?gen Manche
objektorientier-ten Sprachen (darunter Smalltalk) vertreobjektorientier-ten den Standpunkt, alles sei ein Objekt Dieser Ansatz
hat den Vorteil, daß Instanzen von Grundtypen (z.B Integer) Objekte erster Klasse sind, aber
er hat auch den Nachteil, sehr ineffizient zu sein Um unn0tigen Aufwand zu vermeiden, teilen
Trang 28andere Sprachen (darunter Java) das Typensystem in Grundtypen und andere Typen ein Dasbedeutet zwar weniger Aufwand, fhrt aber auch zu einer Spaltung zwischen elementarenund benutzerdefinierten Typen.
C# vers0hnt beide Positionen, indem es ein einheitliches Typensystem pr?sentiert, in dem alleTypen (einschließlich der Grundtypen) von einem gemeinsamen Basistyp abgeleitet sind Eserm0glicht gleichzeitig Leistungsoptimierungen, durch die Grundtypen und einfache benut-zerdefinierte Typen als einfache Speicheradressen behandelt werden k0nnen Das mindertden Aufwand und erh0ht die Effizienz
Robuste und langlebige Software
In einer Welt der Standleitungen und verteilten Systeme kommt der Robustheit von Softwareimmer mehr Bedeutung zu Server mssen 24 Stunden am Tag und sieben Tage in der Wochefr Clients zur Verfgung stehen, und Clients mssen dazu in der Lage sein, Code aus demNetz herunterzuladen und lokal auszufhren, ohne ein Fehlverhalten befrchten zu mssen.C# (in Verbindung mit dem NET Framework) f0rdert die Robustheit von Software auf mehre-ren unterschiedlichen Ebenen
Vor allem ist C# eine typsichere Sprache Das bedeutet, daß Programme nur in korrekterWeise auf Objekte zugreifen k0nnen Aller Code und alle Daten sind mit einem Typ verbun-den, jedes Objekt hat einen zugeh0rigen Typ, und nur die Operationen, die von diesem Typdefiniert werden, k0nnen auf dem Objekt ausgefhrt werden Durch die Typsicherheit f?llteine komplette Kategorie von Fehlern weg, die in C und C++ aufgrund von unzul?ssigenTypumwandlungen, falscher Zeigerarithmetikund sogar auch b0sartigem Code auftraten
Außerdem bietet C# ein automatisches Speichermanagement in Form eines Garbage Collectors, der generationsbasiert und Tracing-f?hig ist Dieser erspart den Program-mierern die manuelle Speicherverwaltung und das Z?hlen von Referenzen und beseitigt eben-falls eine ganze Fehlerkategorie, darunter h?ngende Zeiger, Speicherlecks und zirkul?re Refe-renzen
Hochleistungs-Auch in den besten Programmen k0nnen schlimme Dinge passieren Dies macht einen quenten Mechanismus zum Auffinden von Fehlern so wichtig Fber die Jahre hinweg mußtensich die Windows-Entwickler mit einer Vielzahl von Fehlermeldungsmechanismen herum-schlagen: Es gab einfache Rckgabecodes, die strukturierten Exceptions von Win32, die C++-Exceptions, die COM-Fehler-HResultsund die OLE-Automatisierung mitIErrorInfo-Objekten.Dieser Wildwuchs macht alles nur komplizierter und erschwert die Entwicklung standardisier-ter Verfahren zur Fehlerbehandlung Das NET Frameworkmacht Schluß mit diesem Wild-wuchs, indem es einen einzigen Exception-Handling-Mechanismus fr das gesamte Frame-workstandardisiert und in allen NET-Sprachen einschließlich C# zur Verfgung stellt
konse-Außerdem bietet das C#-Sprachdesign eine Vielzahl weiterer Features zur F0rderung derRobustheit, darunter eine Sprachuntersttzung fr die unabh?ngige Versionierung von Basis-klassen (ohne die Semantik abgeleiteter Klassen zu ?ndern oder eine erneute Kompilierungder abgeleiteten Klassen erforderlich zu machen), fr die Aufdeckung des Versuchs, nicht-initialisierte Variablen zu verwenden, fr die Prfung von Array-Grenzen und fr arithmeti-sche Fberprfungen
Trang 29Eine pragmatische Sicht der Dinge
Viele Entwurfsentscheidungen bei C# knden von einer pragmatischen Sicht der Dinge So
wurde z.B die Syntax so gew?hlt, daß sie C-, C++ und Java-Entwicklern vertraut ist, damit C#
leichter zu erlernen und die Portierung von Quellcode einfacher wird
Obwohl C# viele ntzliche objektorientierte Features auf hohem Niveau bietet, erkennt es
auch an, daß diese Features in seltenen F?llen zu Lasten der Performance gehen k0nnen
Diese Bedenken werden nicht als unwichtig abgetan C# bietet eine Untersttzung fr solche
Features wie direkte Zeigerbearbeitung, unsichere Typumwandlungen, deklarative Fixierung
von Objekten, die von der Garbage Collection erfaßt wurden, und direkte Speicherzuweisung
im Stack Natrlich haben diese Features auch ihren Preis, denn sie machen die Dinge
kompli-zierter und drfen nur von Benutzern mit besonderen Sicherheitsberechtigungen eingesetzt
werden Dennoch gibt ihre Existenz den C#-Programmierern viel mehr Handlungsspielraum,
als andere, restriktivere Sprachen gew?hren
Schließlich erleichtern auch die F?higkeiten zur Interoperabilit?t im NET Framework eine
Nutzung vorhandener DLLs und COM-Komponenten mit C#-Code und die Verwendung von
C#-Komponenten in klassischen COM-Anwendungen Obwohl diese F?higkeit
strenggenom-men eigentlich keine Funktion von C# ist, zeugt sie doch von einer ?hnlich pragmatischen
Sicht der Dinge, wobei neue Funktionalit?t so lange wie n0tig friedlich mit Legacy-Code
koexistieren kann
Das NET Framework
Das NET Frameworkvon Microsoft besteht aus zwei Elementen: einer Laufzeitumgebung
namens Common Language Runtime (CLR) und einer Klassenbibliotheknamens Framework
Class Library (FCL) Die FCL baut auf der CLR auf und stellt Dienste zur Verfgung, die von
modernen Anwendungen ben0tigt werden
W?hrend Anwendungen, die auf das NET Frameworkabzielen, direkt mit der FCL
interagie-ren, fungiert die CLR als die zugrundeliegende Engine Um das NET Frameworkzu verstehen,
muß man zuerst die Rolle der CLR begriffen haben
Die Common Language Runtime
Die CLR ist eine moderne Laufzeitumgebung, die die Ausfhrung von Benutzercode verwaltet
und Dienste wie JIT-Kompilierung, Speichermanagement, Exception-Management,
Debug-ging- und Profiling-Untersttzung sowie ein integriertes Sicherheits- und
Berechtigungsmana-gement zur Verfgung stellt
Die CLR soll fr die n?chsten zehn Jahre die Grundlage der Microsoft-Plattform sein Doch
auch ihre Entwicklung hat lange Zeit gedauert Ihre Ursprnge reichen bis in das Jahr 1997
zurck, als Produkte wie der Microsoft Transaction Server (MTS) begannen, das Versprechen
eines deklarativeren, dienstorientierteren Programmiermodells einzul0sen In diesem neuen
Modell konnten die Entwickler ihre Komponenten zur Entwicklungszeit mit deklarativen
Hin-weisen versehen und sich dann darauf verlassen, daß die Dienste einer Laufzeitumgebung
(z.B MTS) die Komponentenaktivierung kapern und Methodenaufrufe abfangen wrden,
wobei transparent zus?tzliche Dienste wie etwa Transaktionen, Sicherheit, Just-in-Time
(JIT)-Aktivierung und anderes mehr als Zwischenebene eingezogen wurden Dieses Erfordernis,
Trang 30immer mehr COM-Typinformationen zu bekommen, stieß an die Grenzen dessen, was mitIDL und Typbibliotheken m0glich und wnschenswert war So trat das COM+-Team an, umeine umfassende L0sung fr dieses Problem zu suchen.
Auf der 1997er PDC in San Diego wurde erstmals ein L0sungsansatz 0ffentlich diskutiert, alsMary Kirtland und andere Mitglieder des COM+-Teams eine zuknftige Version des COM vor-stelleten, das sich auf ein Ding namens COM+ Runtime sttzen und viele Dienste liefern sollte,die sp?ter in der CLR wieder auftauchten, darunter erweiterbare Typinformationen, Integra-tion in alle Sprachen, Implementierungsvererbung und automatisches Speichermanagement.1Kurz nach der PDC von 1997 h0rte Microsoft auf, sich 0ffentlich ber diese Technologie zu
?ußern, und das Produkt namens COM+, das mit Windows 2000 herauskam, hatte nur wenigEhnlichkeit mit der COM+ Runtime, wie sie ursprnglich beschrieben worden war Doch hin-ter den Kulissen ging die Arbeit weiter, und der Umfang des Projekts wuchs in dem Maße, wieseine Bedeutung fr Microsoft zunahm
Anfangs hatte das Projekt den Codenamen Lightning, machte aber in der Folgezeit vieleinterne (und auch einige externe) Namenswechsel durch Es hieß zwischenzeitlich COM3,COM+ 2.0, COM+ Runtime, NGWS Runtime, Universal Runtime (URT) und schließlich Com-mon Language Runtime Diese Bezeichnung tauchte letztlich als das NET Frameworkwiederauf, das in Orlando, Florida, auf der PDC von Juli 2000 angekndigt wurde In den darauffol-genden 18 Monaten machte das NET Frameworkeine lange Betaphase durch, die schließlich
in der Ver0ffentlichung der Version 1.0 des Microsoft NET Frameworkam 15 Januar 2002 felte
gip-Kompilierungs-und Ausfhrungsmodell
Um die CLR besser verstehen zu k0nnen, mssen Sie wissen, wie sich Compiler fr das NETFrameworkvon den traditionellen Compilern unterscheiden
Traditionelle Compiler zielen auf einen speziellen Prozessor ab, verarbeiten Quellcodedateien
in einer bestimmten Sprache und produzieren Bin?rdateien mit Anweisungsfolgen in der ven Sprache des Zielprozessors Diese Bin?rdateien k0nnen dann direkt auf dem Zielprozes-sor ausgefhrt werden
nati-.NET-Compiler funktionieren etwas anders, denn sie zielen nicht auf einen konkreten nativenProzessor ab, sondern verarbeiten Quellcodedateien und produzieren Bin?rdateien als zwi-schengeschaltete Darstellungsebene der Programmierkonstrukte, die als eine Kombinationvon Metadaten und der Common Intermediate Language (CIL) ausgedrckt werden Damitdiese Bin?rdateien ausgefhrt werden k0nnen, muß die CLR auf dem Zielcomputer laufen
Wenn diese Bin?rdateien ausgefhrt werden, wird die CLR geladen Sie bernimmt dann dieSteuerung und verwaltet die Ausfhrung Sie liefert dabei verschiedene Dienste wie z.B JIT-Kompilierung (wobei die CIL nach Bedarf in den korrekten Anweisungsfolgen fr den zugrun-deliegenden Prozessor konvertiert wird), das Speichermanagement (in Form eines GarbageCollectors), das Exception-Management, die Integration von Debugger und Profiler sowieSicherheitsdienste (Stack-Walking und Prfung von Berechtigungen)
1 Zwei Websites enthalten Artikel von Mary Kirtland ber die COM+-Runtime: http://www.microsoft.com/ msj/defaulttop.asp?page=/msj/1197/inthisissuefeatures1197.htm und http://www.microsoft.com/msj/ defaulttop.asp?page=/msj/1297/inthisissuefeatures1297.htm.
Trang 31Dieses Kompilierungs- und Ausfhrungsmodell erkl?rt auch, warum C# als eine verwaltete
Programmiersprache (managed language) bezeichnet wird, warum der Code, der in der CLR
(managed execution) genannt wird
Diese Abh?ngigkeit von einer Laufzeitumgebung mag anfangs als Nachteil erscheinen, aber in
Wirklichkeit bietet diese Architektur massive Vorteile Da die Metadaten und die
CIL-Darstel-lungen in bezug auf den Prozessor neutral sind, k0nnen Sie die Bin?rdateien unabh?ngig von
der jeweiligen Prozessorarchitektur auf jedem Computer einsetzen, auf dem die Common
Lan-guage Runtime pr?sent ist Da die Erzeugung prozessorspezifischen Codes bis zur Laufzeit
auf-geschoben wird, hat die CLR außerdem die M0glichkeit, je nach der Zielarchitektur, auf der
der Code l?uft, prozessorspezifische Optimierungen vorzunehmen Wenn die
Prozessortech-nologie Fortschritte macht, ben0tigen die Anwendungen lediglich eine aktualisierte Version
der CLR, um von diesen Fortschritten zu profitieren
Im Gegensatz zu den traditionellen Bin?rdarstellungen, die haupts?chlich eine Reihe von
nati-ven Prozessoranweisungen sind, bewahrt die Kombination von Metadaten und CIL fast alle
Konstrukte der Quellsprache Außerdem ist diese Darstellung quellsprachenneutral, so daß
die Entwickler Anwendungen in mehreren Quellsprachen schreiben k0nnen Sie k0nnen fr
jede Aufgabe die am besten geeignete Sprache ausw?hlen und sind nicht gezwungen, fr jede
Anwendung eine bestimmte Quellsprache als Standard zu definieren oder sich auf
Kompo-nententechnologien wie COM oder CORBA sttzen zu mssen, um die Unterschiede zwischen
den Quellsprachen zu maskieren, in denen die getrennten Komponenten einer Anwendung
geschrieben wurden
Das Common Type System
Letztlich ist die CLR dazu da, unabh?ngig von der Quellsprache den managed Code in sicherer
Form zu verwalten Um Arbeit die mit verschiedenen Programmiersprachen zu erm0glichen,
die Typsicherheit zu gew?hrleisten und verwaltete Ausfhrungsdienste wie die
JIT-Kompilie-rung, die Garbage Collection, das Exception-Management usw zur Verfgung zu stellen, muß
die CLR den managed Code, den sie gerade ausfhrt, genau kennen
Damit dies m0glich ist, definiert die CLR ein gemeinsam genutztes Typensystem namens
Com-mon Type System (CTS) Das CTS definiert, nach welchen Regeln s?mtliche Typen deklariert,
definiert und verwaltet werden, egal aus welcher Quellsprache sie stammen Das CTS wurde
so reichhaltig und flexibel gestaltet, daß es eine Vielzahl von Quellsprachen untersttzt und
die Grundlage fr die Arbeit mit vielen verschiedenen Programmiersprachen, Typsicherheit
und verwaltenden Ausfhrungsdiensten darstellt
Compiler fr verwaltete Programmiersprachen, die vollwertige Mitglieder der CLR-Welt sein
sollen, sind dafr zust?ndig, die Konstrukte der Quellsprache ihren jeweiligen
CTS-Entspre-chungen zuzuordnen Wenn es keine unmittelbare Entsprechung gibt, k0nnen die
Sprachde-signer beschließen, entweder die Quellsprache besser an die CTS anzupassen (um eine
naht-lose Integration der Sprachen zu erm0glichen) oder noch etwas Klempnerarbeit zu leisten, um
die Originalsemantikder Quellsprache zu erhalten (was jedoch zu Lasten der M0glichkeit zur
Arbeit mit verschiedenen Programmiersprachen gehen kann)
Trang 32Da alle Typen letztlich als CTS-Typen dargestellt werden, wird es nun m0glich, interessanteneue Kombinationen von Typen zu schaffen, die in verschiedenen Sprachen geschrieben wur-den Da verwaltete Programmiersprachen letztlich CTS-Typen deklarieren und da das CTS dieVererbung untersttzt, ergibt sich, daß die CLR auch die Vererbung ber einzelne Sprachenhinweg untersttzt.
Die Common Language Specification
Daß nicht alle Sprachen genau dieselben Konstrukte untersttzen, kann ein Hindernis fr dieIntegration verschiedener unterschiedlicher Programmiersprachen sein Nehmen Sie folgen-des Beispiel: Sprache A gestattet nicht-vorzeichenbehaftete Typen (die auch vom CTS unter-sttzt werden), aber Sprache B tut dies nicht Wie soll Code, der in Sprache B geschriebenwurde, eine Methode aufrufen, die in Sprache A geschrieben wurde, wenn diese Methodeeinen nicht-vorzeichenbehafteten Integer als Parameter entgegennimmt?
Die L0sung heißt Common Language Specification (CLS) Die CLS definiert eine vernnftigeTeilmenge des CTS, die ausreichen sollte, um eine Integration der verschiedenen einzelnenProgrammiersprachen zu erm0glichen, und konkrete Probleme wie z.B nicht-vorzeichenbe-haftete Integer, berladene Operatoren und dergleichen ausschließt
Jede verwaltete Programmiersprache entscheidet selbst, wieviel vom CTS sie untersttzen will.Sprachen, die jeden CLS-konformen Typ verarbeiten k0nnen, nennt man CLS-Consumer, undSprachen, die jeden vorhandenen CLS-konformen Typ erweitern k0nnen, nennt man CLS-Extender Natrlich k0nnen verwaltete Programmiersprachen nach Belieben CTS-Featuresauch ber die CLS hinaus untersttzen, und die meisten tun dies auch So ist z.B C# sowohlCLS-Consumer als auch CLS-Extender und untersttzt alle wichtigen Features des CTS.Diese Kombination aus dem reichhaltigen und flexiblen CTS und der berall untersttztenCLS fhrte dazu, daß viele Sprachen fr die NET-Plattform angepaßt wurden Als dieses Buchgeschrieben wurde, bot Microsoft bereits Compiler fr sechs verwaltete Programmiersprachen
an (C#, VB NET, JScript, Managed Extensions for C++, Microsoft IL und J#), und eine Vielzahlvon Herstellern aus der Wirtschaft und aus den Universit?ten vertrieb verwaltete Versionenvon Programmiersprachen, unter anderem fr COBOL, Eiffel, Haskell, Mercury, Mondrian,Oberon, Forth, Scheme, Smalltalk, APL, diverse Pascal-Flavors und andere mehr
Wenn man betrachtet, wieviel Aufmerksamkeit NET von Wirtschaft und Forschung gebracht wird, so kann man sagen, daß NET so etwas wie eine Renaissance in der Entwick-lung von Programmiersprachen ausgel0st hat
entgegen-Die Framework Class Library
Die Bedrfnisse der Entwickler (und die F?higkeiten von Windows) haben sich stark kelt, seit im November 1985 Windows 1.0 eingefhrt wurde W?hrend Windows wuchs, umneue Bedrfnisse der Kunden zu befriedigen, wuchsen auch die APIs mit der Zeit um Gr0ßen-ordnungen, wurden immer komplexer und inkonsistenter und waren schließlich in ihrerGesamtheit kaum noch zu erfassen
entwik-Hinzu kam, daß zwar moderne Paradigmen wie die Objektorientierung, ware und Internet-Standards entstanden und in vielen F?llen zum Mainstream wurden, aber indas Windows-Programmiermodell nicht umfassend und konsistent integriert wurden
Trang 33Komponentensoft-Wenn Sie diese Probleme sehen und bercksichtigen, wie viele Enderungen allein schon
durch den Fbergang zu einer verwaltenden Ausfhrungsumgebung notwendig werden, dann
ist klar, daß die Zeit fr einen sauberen Neubeginn gekommen war Infolgedessen ersetzt das
.NET Frameworkdie meisten (wenn auch nicht alle) traditionellen Windows-APIs durch eine
gut ausgestattete, objektorientierte Klassenbibliothek namens Framework Class Library (FCL)
Die FCL stellt eine breite Palette von Softwarediensten auf hoher Ebene zur Verfgung, die auf
die Bedrfnisse moderner Anwendungen zugeschnitten sind Konzeptionell k0nnen diese in
sieben Kategorien eingeteilt werden:
· Untersttzung fr die Kernfunktionalit?t, z.B die Interaktion mit Grunddatentypen und
Collections, Konsolen-, Netzwerk- und Datei-I/O und fr die Interaktion mit anderen
Ele-menten der Laufzeitumgebung
· Untersttzung fr die Interaktion mit Datenbanken; die Verarbeitung und Erzeugung von
XML und die Verarbeitung von Daten in Tabellen- und Baumstrukturen
· Untersttzung fr Webanwendungen (Thin-Client-Anwendungen) mit einem
umfangrei-chen serverseitigen Event-Modell
· Untersttzung fr die Erstellung von Desktop-Anwendungen
(Thick-Client-Anwendun-gen) einschließlich einer umfassenden Untersttzung fr die
Windows-Benutzeroberfl?-che
· Untersttzung fr die Erstellung SOAP-basierter XML-Web Services
Die FCL ist eine gewaltige Bibliothekmit mehr als 3.500 Klassen In Kapitel 5 finden Sie einen
detaillierteren Fberblickber den Inhalt der FCL
ECMA-Standardisierung
Sehr ermutigend an dem NET Frameworkist der Grad an Offenheit, den Microsoft w?hrend
der Entwicklung dieser Plattform an den Tag legte Von den ersten 0ffentlichen Vorpremieren
an waren die Kernspezifikationen zu C#, die Klassen der FCL und die inneren Vorg?nge in der
CLR frei zug?nglich
Diese Offenheit nahm jedoch ganz neue Dimensionen an, als Microsoft im November 2000
mit seinen Co-Sponsoren Intel und HP offiziell die Spezifikationen der Programmiersprache
C#, einen Teil der FCL und die Laufzeitumgebung der ECMA zur Standardisierung vorlegte
Damit begann ein intensiver Standardisierungsprozeß, an dem Microsoft, HP, Intel, IBM,
Fujitsu, Sun, Netscape, Plum Hall, OpenWave und andere Organisationen beteiligt waren Die
Arbeit fand unter der Egide des ECMA Technical Committee TC39 statt, das zuvor die
Pro-grammiersprache JavaScript als ECMAScript standardisiert hatte
TC39 heuerte zwei neue Arbeitsgruppen fr die eigentliche Standardisierungsarbeit an: Die
eine konzentrierte sich auf C# und die andere auf das, was sp?ter die Common Language
Infrastructure (CLI) wurde
Die CLI bestand aus der Laufzeit-Engine und dem Teil der FCL, der standardisiert wurde Vom
Konzept her soll die CLR von Microsoft eine standardkonforme, kommerzielle
Implementie-rung der Laufzeit-Engine sein, die in der CLI spezifiziert wird; und die FCL von Microsoft soll
Trang 34eine standardkonforme, kommerzielle Implementierung der Klassenbibliothek sein, die in derCLI spezifiziert wird (obwohl sie natrlich viel mehr ist als nur die 294 Klassen, die letztlich inder CLI spezifiziert wurden).
Nach mehr als einem Jahr harter Arbeit hatten die Arbeitsgruppen ihre mhungen abgeschlossen und legten die Spezifikationen der ECMA General Assembly vor
Standardisierungsbe-Am 13 Dezember 2001 genehmigte diese General Assembly die Spezifikationen von C# undCLI als internationalen Standard und gab ihnen die Nummern ECMA-334 (C#) ECMA-335(CLI) Kopien der ECMA-Standards erhalten Sie unter http://www.ecma.ch
Kritiker haben behauptet, die ECMA-Standardisierung sei nichts als ein Trick, mit dem soft von den plattformbergreifenden Vorteilen von Java ablenken wollte Doch die Fachleute,die diese Standardisierung durchfhrten, waren so hochqualifiziert und so eng in den langwie-rigen Standardisierungsprozeß eingebunden, daß diese Kritikins Leere geht Microsoft sowieseine Co-Sponsoren und die anderen Mitglieder der Standardisierungsteams betrauten einigeihrer besten und klgsten K0pfe mit dieser Aufgabe und investierten viel Zeit und Mhe in dieStandardisierung Angesichts der Tatsache, daß diese Arbeit parallel zur Entwicklung und Ver-0ffentlichung des NET Frameworklief, sprechen diese gewaltigen Investitionen von Microsoftund anderen den Verschw0rungstheorien hohn
Micro-Damit ein Standard auch Wirkung zeigen kann, muß er natrich implementiert werden Zudem Zeitpunkt, als dies geschrieben wurde, waren noch nicht viele standardkonformen Refe-renzimplementierungen ausgeliefert worden Doch die Arbeit an Open- und Shared Source-Implementierungen fr C# und die CLI, sowohl fr kommerzielle als auch fr nichtkommer-zielle Zwecke, ist bereits fortgeschritten
Microsoft arbeitet zusammem mit Corel an einer Shared Source-Implementierung der CLI und
an darauf abgestimmten Compilern fr C# und ECMAScript Dieses Projekt, das den men Rotor tr?gt, wurde am 27 M?rz 2002 freigegeben und l?uft sowohl unter Windows alsauch unter FreeBSD Mit der Shared Source-Lizenz wird diese CLI-Implementierung fr dennichtkommerziellen Einsatz in Forschung und Lehre und fr Hobbyprogrammierer lizensiert
Codena-Doch die Implementierung von Microsoft ist nicht die einzige Auch Mono und dotGNU ten an CLI-Implementierungen
arbei-Das Mono-Projekt (http://www.go-mono.com), das von der Ximian Corporation begonnenwurde, soll vollst?ndige Open Source-Implementierungen (GPL und LGPL) liefern, und zwarnicht nur fr die CLI-Plattform und den C#-Compiler, sondern auch fr eine gr0ßere AnzahlKlassen aus der FCL des NET Frameworkvon Microsoft Zus?tzlich zu den internen Ressour-cen, die Ximian fr das Projekt zur Verfgung stellte, zog das Mono-Projekt auch die Aufmerk-samkeit der Open Source-Gemeinschaft auf sich und gewinnt nun massiv an Fahrt
Abschließend sei noch auf das Open Source-Projekt (GPL) dotGNU hingewiesen (http://www.dotgnu.org) Dieses ist zwar nicht so bekannt wie Mono, kommt aber dennoch voran, nichtzuletzt wegen einiger interessanter und einzigartiger Konzepte, die es einfhrt Der Kern vondotGNU heißt Portable.NET und war ursprnglich das Kind eines einzelnen Entwicklers (RhysWeatherley), bevor er im August 2000 sein Projekt in dotGNU einbrachte Das Besondere amdotGNU-Projekt ist, daß es ursprnglich um einen CLI-Interpreter und nicht um einen JIT-Compiler herum entworfen wurde (obwohl das Team plant, zu einem sp?teren Zeitpunktauch eine JIT-Kompilierung hinzuzufgen), und die Entwickler planen, die direkte Ausfh-rung von Java-Binaries zu untersttzen
Trang 35Sehr wahrscheinlich werden mit der Zeit noch mehr CLI-Implementierungen entstehen Es ist
zwar noch zu frh, um zu sagen, ob das NET Framework(in Form der CLI) jemals auf so
vie-len Plattformen zur Verfgung stehen wird wie heute Java, aber das bisherige Maß an
Aufge-schlossenheit und Interesse seitens der Programmierergemeinschaft l?ßt das Beste hoffen
Trang 36KAPITEL 2
Grundlagen von C#
In diesem Kapitel wird ein einfaches C#-Programm erkl?rt, und die Grundlagen von C# den eingefhrt
wer-Das erste C#-Programm
Im Folgenden sehen Sie ein einfaches C#-Programm:
}
Ein C#-Programm besteht aus Typen (in der Regel sind dies Klassen), die in Namensr?umenorganisiert sind Jeder Typ enth?lt Funktions-Member (Methoden und Eigenschaften) sowieDaten-Member (Felder) Methoden enthalten eine Reihe von Anweisungen, die nacheinanderausgefhrt werden In unserem Programm definieren wir eine Klasse namens Example miteiner Methode namensMain, deren einzige Anweisung die WorteHello world!in das Konso-lenfenster schreibt C# erkennt diese Methode als Standardeinstiegspunkt fr die Ausfhrung,also als den Punkt, an dem das Programm anf?ngt
Die KlasseConsole kapselt eine Standard-Ein-Ausgabefunktionalit?t und stellt Methoden wiez.B.WriteLinezur Verfgung Um Typen aus einem anderen Namensraum zu benutzen, ver-wenden Sie dieusing-Anweisung Da sich die KlasseConsoleim NamensraumSystembefindet,gehen wir ber System Typen aus anderen Namensr?umen k0nnten entsprechend unsereKlasseExamplenutzen, indem sie aufFirstProgramzugreifen
In C# gibt es keine selbst?ndigen Funktionen Funktionen h?ngen immer mit einem Typ oder,wie Sie noch sehen werden, mit Instanzen eines Typs zusammen Unser Programm ist ganz
Trang 37einfach und nutzt nur statische Member Das bedeutet, daß das Member mit seinem Typ
ver-bunden ist, und nicht mit Instanzen seines Typs Außerdem verwenden wir nur
void-Metho-den, also Methovoid-Metho-den, die keinen Wert zurckgeben
Im weiteren Verlauf dieses Buchs enthalten die meisten Beispiele den folgenden Coderumpf:
Bezeichner und Schlsselw-rter
Bezeichner sind die Namen, die Programmierer ihren Typen, Methoden, Variablen usw
geben Ein Bezeichner muß ein ganzes Wort sein und besteht im wesentlichen aus
Unicode-Zeichen, die mit einem Buchstaben oder einem Unterstrich beginnen Sie drfen nicht mit
einem Schlsselwort in Konflikt treten Als Sonderfall wird mit dem Pr?fix@ein
Namenskon-flikt mit einem Schlsselwort verhindert, aber dieses Zeichen wird nicht als Bestandteil des
Bezeichners betrachtet Die folgenden beiden Bezeichner sind somit ?quivalent:
Ko R n
@Ko R n
C#-Bezeichner unterscheiden zwar zwischen Groß- und Kleinschreibung, aber aus Grnden
der Kompatibilit?t mit anderen Sprachen sollten Sie darauf achten, daß sich 0ffentliche oder
geschtzte Bezeichner nicht durch die Groß- und Kleinschreibung allein unterscheiden
In C# gibt es folgende Schlsselw0rter:
Trang 38struct switch this throw true
while
Grundlegendes zu den Typen
Ein C#-Programm verstehen Sie am besten anhand seiner drei Grundelemente: Funktionen,Daten und Typen Da dieses Buch bereits einige Programmiererfahrung voraussetzt, gebenwir als erstes einen Fberblick ber die Funktionen und Daten (diese drften Sie bereits ken-nen) und erkl?ren dann die Typen etwas genauer
Funktionen
Eine Funktion fhrt eine Aktion durch, indem sie eine Reihe von Anweisungen ausfhrt
So k0nnen Sie z.B eine Funktion haben, die den Abstand zwischen zwei Punktenzurckgibt, oder eine Funktion, die den Durchschnitt aus einem Array von Wertenberechnet Mit einer Funktion k0nnen Daten verarbeitet werden
Daten
Daten sind die Werte, auf denen Funktionen operieren Dies k0nnen z.B die ten eines Punktes oder ein Array von Werten sein Daten haben immer einen bestimmtenTyp
Koordina-Typen
Ein Typ hat Daten-Member und Funktions-Member Die Funktions-Member dienendazu, die Daten-Member zu verarbeiten Die h?ufigsten Typen sind Klassen und Structs,denn sie liefern eine Schablone, um Daten zu erzeugen Daten sind immer Instanzen vonTypen
Da Typen ein ziemlich abstraktes Konzept sind, betrachten wir als erstes zwei konkrete spiele
Bei-Die Klasse String
Die Klasse String spezifiziert eine Zeichenfolge Das bedeutet: Sie k0nnen Werte wie ».NET«oder »http://oreilly.com« als Strings speichern Sie k0nnen aber auch Funktionen auf Stringsausfhren, beispielsweise das Zeichen an einer bestimmten String-Position zurckgeben oderdie Darstellung eines Strings in Kleinschreibung erhalten
In diesem Beispiel geben wir den String ».NET« in Kleinbuchstaben aus (».net«) und rufen dieL?nge des Strings ab (4) Dazu erzeugen wir als erstes eine Instanz eines Strings und verwen-den dann die MethodeToLowerund die EigenschaftLength Beide sind Funktions-Member die-ses Strings
Trang 39Console.WriteLine (s.Length); // Ausgabe: 4
}
}
Das Struct int
Das Struct int spezifiziert einen vorzeichenbehafteten Integer (eine positive oder negative
ganze Zahl) mit einer L?nge von 32 Bit Das bedeutet, daß Sie in diesem Typ Werte zwischen
-2147483648 und 2147483647 (oder zwischen -2n-1und 2n-1-1, wobei n=32) speichern k0nnen
Auf einemintk0nnen Sie Operationen wie die Addition, Multiplikation usw ausfhren
In diesem Beispiel geben wir das Ergebnis einer Multiplikation von 3 mal 4 aus Dazu
erzeu-gen wir zweiint-Instanzen und verwenden dann den Operator* Der Typintist ein
einge-bauter Typ, der eine elementare Rechenfunktionalit?t (z.B *) untersttzt Es ist aber
hilf-reicher, sich den Operator*als Funktions-Member des Typsintvorzustellen
Ein benutzerdefinierter Typ
In C# k0nnen Sie auch eigene Typen definieren Eigentlich ist es ja das Wesen der
Program-mierung, neue Typen zu definieren, die jeweils eine Reihe von Daten- und
Funktions-Mem-bern haben In diesem Beispiel erstellen wir einen neuen Typ namensCounter:
// Importiert Typen aus dem Namensraum System, z.B Console
using System;
class Counter { // Neue Typen sind in der Regel Klassen oder Structs
// Daten-Member
-int value; // Feld vom Typ -int
int scaleFactor; // Feld vom Typ int
// Konstruktor zur Initialisierung einer Instanz des Typs
public Counter(int scaleFactor) {
public int Count {
get {return value; }
Trang 40class Test {
// Ausf=hrung beginnt hier
static void Main() {
// Erzeuge eine Instanz vom Typ CounterCounter c = new Counter(5);
Instanzen von Typen
Um einen Typ zu benutzen, mssen Sie eine Instanz davon erzeugen Daten- und Member, die Sie nur benutzen k0nnen, wenn Sie vorher einen entsprechenden Typ instantiierthaben, nennt man Instanz-Member (und standardm?ßig sind Member immer Instanz-Mem-ber) Daten- und Funktions-Member, die auf dem Typ selbst verwendet werden k0nnen, hei-ßen statische Member
Funktions-In diesem Beispiel gibt die Funktions-InstanzmethodePrintNameden Namen eines bestimmten ren aus, w?hrend die statische MethodePrintSpeciesNameden Namen ausgibt, der allen Panda-b?ren in der Anwendung (AppDomain) gemeinsam ist:
Pandab?-using System;
class Panda {
string name;
static string speciesName = "Ailuropoda melanoleuca";
// Initialisiert Panda (Siehe Instanzkonstruktoren)
static void Main() {
Panda.PrintSpeciesName(); // Rufe statische Methode aufPanda p1 = new Panda("Petey");
Panda p2 = new Panda("Jimmy");
p1.PrintName(); // Rufe Instanzmethode auf