1. Trang chủ
  2. » Công Nghệ Thông Tin

OReilly c sharp in a nutshell dec 2002 ISBN 3897212994 pdf

926 95 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 926
Dung lượng 4,59 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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 1

IN A NUTSHELL

Trang 3

IN 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 4

Dennoch 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 5

Vorwort 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 6

4: 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 7

Prozedurale 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 8

Aufl&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 9

COM-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 10

30: 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 11

C: 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 13

Dieses 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 14

zigartige, 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 15

Kapitel 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 16

Kapitel 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 17

Aus-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 18

An 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 19

Online-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 20

So 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 21

Ben 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 23

TEIL I

Programmieren mit C#

Trang 25

KAPITEL 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 26

Die 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 27

ten 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 28

andere 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 29

Eine 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 30

immer 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 31

Dieses 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 32

Da 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 33

Komponentensoft-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 34

eine 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 35

Sehr 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 36

KAPITEL 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 37

einfach 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 38

struct 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 39

Console.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 40

class 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

Ngày đăng: 20/03/2019, 15:10

TỪ KHÓA LIÊN QUAN