03.08.2013 Aufrufe

Die Klassenbibliothek des .NET Framework

Die Klassenbibliothek des .NET Framework

Die Klassenbibliothek des .NET Framework

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong><br />

.<strong>NET</strong> <strong>Framework</strong><br />

In diesem Kapitel lernen Sie<br />

• woraus das Microsoft .<strong>NET</strong> <strong>Framework</strong> besteht.<br />

• die wichtigsten Komponenten <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> kennen.<br />

• die wichtigsten Namespaces kennen, aus denen sich die <strong>Klassenbibliothek</strong><br />

<strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> zusammensetzt.<br />

In den vorherigen Kapiteln haben Sie erfahren, wie Sie verwaltetes C++ zur<br />

Erstellung einfacher Anwendungen verwenden. Nun wenden Sie sich der<br />

Aufgabe zu, echte Microsoft .<strong>NET</strong>-Anwendungen zu erstellen, die GUIs,<br />

Datenbanken, Webserver und all die anderen Mechanismen umfassen, die<br />

moderne Microsoft Windows-Anwendungen auszeichnen. Und hier kommt<br />

das .<strong>NET</strong> <strong>Framework</strong> ins Spiel.<br />

Das .<strong>NET</strong> <strong>Framework</strong> ist die neue <strong>Klassenbibliothek</strong>, auf die Sie bei der Erstellung<br />

von Windows-Anwendungen zugreifen. Sie ist umfangreich, relativ<br />

komplex und bietet weit reichende Funktionalität. <strong>Die</strong>ses Kapitel gibt Ihnen<br />

einen Überblick über das .<strong>NET</strong> <strong>Framework</strong> und <strong>des</strong>sen Leistungsfähigkeit,<br />

und in späteren Kapiteln werden einige seiner Eigenschaften detailliert vorgestellt.<br />

Was ist das .<strong>NET</strong> <strong>Framework</strong>?<br />

Das .<strong>NET</strong> <strong>Framework</strong> ist eine Plattform, die von Microsoft zur Vereinfachung<br />

der Entwicklung moderner Anwendungen wie etwa der Folgenden<br />

entworfen wurde:<br />

• Anwendungen, die hoch entwickelte GUI-Frontends verwenden<br />

• Anwendungen, die das Internet verwenden<br />

15<br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> 15-1


• Anwendungen, die auf mehreren Computern verteilt werden<br />

• Anwendungen, die einen anspruchsvollen Datenbankeinsatz erfordern<br />

Das .<strong>NET</strong> <strong>Framework</strong> besitzt zwei Hauptkomponenten: die Common Language<br />

Runtime (auch CLR genannt) und die <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong><br />

<strong>Framework</strong>. In diesem Kapitel werden beide Komponenten vorgestellt.<br />

<strong>Die</strong> Common Language Runtime<br />

Sie haben die Common Language Runtime schon kennen gelernt, denn dabei<br />

handelt es sich um den Teil von .<strong>NET</strong>, der die »Verwaltung« innerhalb der<br />

verwalteten Erweiterungen für C++ bereitstellt. <strong>Die</strong> CLR ist eine Ausführungsengine<br />

zur Laufzeit, die innerhalb der .<strong>NET</strong>-Umgebung für die Ausführung<br />

von Code verantwortlich ist und <strong>Die</strong>nste wie Sicherheit, Speicherverwaltung<br />

und Remoting (die Kommunikation zwischen Objekten aus unterschiedlichen<br />

Domänen, Prozessen oder Computern) bereitstellt. Der Code,<br />

der von der CLR ausgeführt wird, wird verwalteter Code genannt; ein Code,<br />

der nicht der Steuerung durch die CLR unterliegt, ist dagegen nicht verwalteter<br />

Code. Der gesamte Microsoft Visual Basic- und C#-Code ist verwaltet,<br />

doch in Microsoft Visual C++ besteht die Möglichkeit, sowohl verwalteten<br />

als auch nicht verwalteten Code zu schreiben. Außerdem können beide<br />

Codetypen im gleichen Programm zusammenarbeiten.<br />

Intermediate Language<br />

<strong>Die</strong> Kompilierung aller .<strong>NET</strong>-Sprachen führt zu einer Zwischensprache, Intermediate<br />

Language oder IL genannt. <strong>Die</strong>se Sprache ist auch unter der Bezeichnung<br />

MSIL (Microsoft Intermediate Language) bekannt.<br />

IL ähnelt Java-Bytecode darin, dass es sich um eine zwischengeschaltete<br />

Codeform handelt, die vom Compiler erstellt wird und nicht direkt auf einem<br />

Zielsystem ausgeführt werden kann. IL-Code ist auch portierbar. Im Gegensatz<br />

zu Java wird IL-Code allerdings vor der Ausführung immer in nativen<br />

Code konvertiert; diese Aufgabe übernimmt ein JIT-Compiler (Just-In-Time-<br />

Compiler). <strong>Die</strong>se Konvertierung kann nach Bedarf ausgeführt werden, also<br />

Funktion für Funktion während der Programmausführung, oder insgesamt im<br />

Rahmen der Programminstallation.<br />

Einer der großen Vorteile von IL liegt darin, dass es sich nicht einfach um<br />

einen maschinenunabhängigen Objektcode auf niedriger Ebene handelt. Tatsächlich<br />

ist die Unterstützung objektorientierter Funktionalität wie etwa die<br />

Ideen von Klassen, Kapselung und Verbergen von Daten, Polymorphie und<br />

Vererbung in IL integriert. Sie können IL daher als einen Typ einer objektori-<br />

15-2 Kapitel 15


entierten Assemblersprache ansehen. IL ist dadurch wesentlich leistungsfähiger<br />

als Java-Bytecode und ermöglicht Ihnen die sprachübergreifende objektorientierte<br />

Programmierung, den einfachen Aufruf von Members in Klassen<br />

<strong>des</strong> verwalteten C++ von Visual Basic aus und umgekehrt und sogar das<br />

Vererben von einer Klasse <strong>des</strong> verwalteten C++ in Visual Basic.<br />

Wenn Sie daran interessiert sind, wie IL aussieht, dann können Sie den IL-<br />

Disassembler ILDASM verwenden, um eine ausführbare .<strong>NET</strong>-Datei zu öffnen<br />

und den Code in IL anzuzeigen. Ein Beispiel hierfür finden Sie weiter<br />

hinten in diesem Kapitel.<br />

Das Common Type System<br />

Das Common Type System (oder CTS) stellt eine Spezifikation dafür bereit,<br />

wie Typen definiert, verwaltet und verwendet werden, und dies ist ein wichtiger<br />

Teil der sprachübergreifenden .<strong>NET</strong>-Integration. Das CTS beschreibt eine<br />

Menge von Regeln, denen Sprachen gehorchen müssen, und hilft damit, die<br />

Zusammenarbeit von Typen sicherzustellen, die in unterschiedlichen Sprachen<br />

erstellt wurden.<br />

<strong>Die</strong> Common Language Specification<br />

<strong>Die</strong> Common Language Specification (oder CLS) besteht aus einer Menge<br />

von Regeln und Einschränkungen, denen die Hersteller von Compilern und<br />

Bibliotheken folgen müssen. Damit wird sichergestellt, dass neue Sprachen<br />

und neuer Code mit anderen .<strong>NET</strong>-Sprachen zusammenarbeiten. CLS bildet<br />

eine Teilmenge von CTS, und wenn eine Sprache oder eine Bibliothek CLSkompatibel<br />

ist, dann kann damit die uneingeschränkte Zusammenarbeit mit<br />

anderen CLS-kompatiblen Sprachen garantiert werden.<br />

Sie werden feststellen, dass in der Onlinedokumentation einige .<strong>NET</strong>-<br />

Memberfunktionen als nicht CLS-kompatibel gekennzeichnet sind. <strong>Die</strong>s<br />

bedeutet, dass einige .<strong>NET</strong>-Sprachen möglicherweise nicht darauf zugreifen<br />

können. Beispielsweise sind solche Funktionen nicht CLS-kompatibel, die<br />

nicht signierte Ganzzahlen verwenden, da die von der CLS spezifizierten<br />

Typen keine nicht signierte Ganzzahlen umfassen; aus Visual Basic heraus<br />

kann nicht auf diese Funktionen zugegriffen werden.<br />

Hinweis<br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> 15-3


<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong><br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> ist eine objektorientierte Bibliothek,<br />

deren Klassen alle Tools bereitstellen, die zur Erstellung einer Vielzahl<br />

unterschiedlicher Programme notwendig sind.<br />

Seit der ersten Windows-Version erstellten Programmierer ihre Windows-<br />

Anwendungen mit der Windows-API (Application Programming Interface).<br />

Damit stehen Ihnen mehrere tausend C-Funktionen zur Verfügung, die Sie<br />

aus Ihren Programmen heraus aufrufen können, um mit Windows zusammenzuarbeiten.<br />

Allerdings sind mit der Windows-API zwei Probleme verbunden:<br />

Sie ist nicht objektorientiert, und es handelt sich um eine C-Bibliothek, die<br />

nicht so einfach aus jeder Sprache heraus verwendet werden kann.<br />

Einer der Vorteile objektorientierter Programmierung liegt in der einfacheren<br />

Strukturierung und Verwaltung umfangreicher Projekte. <strong>Die</strong> Windows-API<br />

enthält inzwischen tausende von Funktionen, und es wird immer schwerer,<br />

eine solche Sammlung nicht strukturierter Routinen zu verwalten. Neben<br />

weiteren Vorteilen wie Kapselung und Polymorphie ermöglicht Ihnen die<br />

objektorientierte Programmierung, den Code mit einer Struktur zu versehen,<br />

sodass z.B. eine Klasse Dialog alle Funktionen enthalten kann, die sich auf<br />

Dialogfelder beziehen. Eine Bibliothek von der Größe der Windows-API<br />

kann dadurch wesentlich einfacher verwendet werden.<br />

Das zweite Problem der Windows-API besteht darin, dass sie grundsätzlich<br />

für C-Programmierer erstellt wurde und somit viele Eigenschaften verwendet,<br />

die für C charakteristisch sind, beispielsweise Zeiger und mit Null terminierte<br />

Zeichenfolgen. Dadurch ist es schwer und manchmal sogar unmöglich, die<br />

Funktionalität aus anderen Sprachen als C oder C++ heraus zu nutzen. Es<br />

bedeutet außerdem, dass tendenziell viele hässliche »Umwege« nötig sind,<br />

um eine Schnittstelle zwischen Sprachen wie Visual Basic und der API zu<br />

schaffen.<br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> stellt Klassen bereit, die aus<br />

jeder .<strong>NET</strong>-Sprache heraus genutzt werden können, da dies auf der IL-Ebene<br />

geschieht. Alle .<strong>NET</strong>-Sprachen kompilieren den gleichen Zwischencode, und<br />

da sie alle Verweise sowie eine gemeinsame Grundmenge von Wertetypen<br />

verwenden, stehen die Klassen dieser <strong>Klassenbibliothek</strong> jeder Sprache zur<br />

Verfügung. <strong>Die</strong>s ist ein großer Fortschritt, denn damit wird eine Zusammenarbeit<br />

zwischen den Sprachen in einem Umfang ermöglicht, der bisher unerreicht<br />

ist. In der Vergangenheit erweiterten Compilerhersteller, die mehrere<br />

Sprachen unterstützten (etwa TopSpeed oder Salford), ihre Compiler, um den<br />

gemeinsamen Einsatz ihrer Sprachen in mehrsprachigen Anwendungen zu<br />

vereinfachen, doch niemand bot ein sprachunabhängiges Programmierframework<br />

der Leistungsfähigkeit an, wie sie das .<strong>NET</strong> <strong>Framework</strong> bietet.<br />

15-4 Kapitel 15


<strong>Die</strong> erste Version <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> basiert auf der Windows-Plattform,<br />

doch beim Entwurf wurden zukünftige Portierungen auf andere Plattformen<br />

berücksichtigt.<br />

Metadaten<br />

.<strong>NET</strong>-Klassen sind selbstbeschreibend, da sie in der EXE- oder DLL-Datei<br />

mit Kommentarinformationen versehen sind. <strong>Die</strong>se Informationen, die so<br />

genannten Metadaten, umfassen Folgen<strong>des</strong>:<br />

? Name, Version und kulturspezifische Informationen (wie verwendete<br />

Sprache und Kalender) der Assembly<br />

? <strong>Die</strong> von der Assembly exportierten Typen<br />

? Weitere Assemblies, auf denen diese Assembly basiert<br />

? Für die Ausführung erforderliche Sicherheitsberechtigungen<br />

? Informationen zu jedem Typ in der Assembly: Name, Sichtbarkeit, Basisklasse,<br />

implementierte Schnittstellen und Details zu den Members<br />

? Zusätzliche Attributinformationen<br />

Bei den meisten Informationen handelt es sich um Standardmetadaten, die<br />

vom Compiler während der Erzeugung <strong>des</strong> IL-Co<strong>des</strong> erstellt werden, doch<br />

Sie können Attribute verwenden, um weitere Metadateninformationen hinzuzufügen.<br />

<strong>Die</strong> folgende Übung demonstriert, wie Sie die vom Compiler erstellten Standardmetadaten<br />

ändern.<br />

1. Erstellen Sie ein verwaltetes C++-Anwendungsprojekt mit der Bezeichnung<br />

Meta1. Öffnen Sie den Projektmappen-Explorer, und sehen Sie sich<br />

den Ordner Quelldateien an. Das Projekt umfasst drei C++-Quelldateien.<br />

Meta1.cpp ist der Code der Anwendung, AssemblyInfo.cpp enthält Defin itionen<br />

der Standardmetadatenelemente, die Sie ändern können, und<br />

StdAfx.cpp dient dazu, die Headerdatei StdAfx.h einzuschließen.<br />

2. Öffnen Sie die Datei AssemblyInfo.cpp. <strong>Die</strong> Datei enthält einige Zeilen,<br />

die etwa wie folgt aussehen:<br />

[assembly:AssemblyTitleAttribute("")];<br />

[assembly:AssemblyDescriptionAttribute("")];<br />

[assembly:AssemblyConfigurationAttribute("")];<br />

[assembly:AssemblyCompanyAttribute("")];<br />

[assembly:AssemblyProductAttribute("")];<br />

[assembly:AssemblyCopyrightAttribute("")];<br />

Hinweis<br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> 15-5


[assembly:AssemblyTrademarkAttribute("")];<br />

[assembly:AssemblyCultureAttribute("")];<br />

Sie fügen Metadaten in C++-Code ein, indem Sie die betreffenden Angaben<br />

in eckige Klammern ([ ]) einschließen. Der Teil assembly: am Anfang<br />

zeigt an, dass es sich um ein Attribut handelt, das sich auf eine Assembly<br />

bezieht, und nicht um einen Typ innerhalb einer Assembly. Sie können eine<br />

Standardattributmenge verwenden, um die Metadaten zu ändern, die in<br />

eine Assembly kompiliert wurden. <strong>Die</strong> meisten dieser Attribute sind in<br />

AssemblyInfo.cpp aufgelistet.<br />

3. Bearbeiten Sie die Zeile AssemblyCompanyAttribute, und fügen Sie einen<br />

passenden Namen wie etwa den Folgenden ein:<br />

[assembly:AssemblyCompanyAttribute("Acme Rocket Sled, Inc.")];<br />

4. Erstellen Sie nun das Projekt, womit automatisch die Assembly für Sie<br />

erstellt wird. Wie können Sie sich vergewissern, dass die Metadaten in der<br />

Assembly Ihre Änderung widerspiegeln? Eine Möglichkeit, dies zu überprüfen,<br />

bietet ILDASM, der IL-Disassembler. ILDASM ist Teil <strong>des</strong> .<strong>NET</strong><br />

SDK und bei der Beta 2 im Verzeichnis \Programme\Microsoft.<strong>NET</strong>-<br />

\<strong>Framework</strong>SDK\Bin gespeichert. Sie starten das Programm entweder aus<br />

diesem Verzeichnis oder öffnen eine Microsoft Visual Studio .<strong>NET</strong>-<br />

Eingabeaufforderung, wozu Sie im Menü Start auf Programme und dann<br />

auf Microsoft Visual Studio .<strong>NET</strong> 7.0, Visual Studio .<strong>NET</strong> Tools und auf<br />

Visual Studio .<strong>NET</strong>-Eingabeaufforderung klicken. Es wird ein Konsolenfenster<br />

geöffnet, in dem der Pfad entsprechend festgelegt ist, sodass alle<br />

Visual Studio .<strong>NET</strong>- und .<strong>NET</strong> SDK-Verzeichnisse eingeschlossen sind.<br />

Geben Sie also einfach ildasm ein, um das Programm zu starten.<br />

5. Nachdem das ILDASM-Fenster geöffnet wurde, verwenden Sie das Menü<br />

Datei, um nach der ausführbaren Datei Met1.exe zu suchen und sie zu öffnen.<br />

Sie sollten in etwa Folgen<strong>des</strong> sehen:<br />

6. Doppelklicken Sie auf MANIFEST; daraufhin wird ein weiteres Fenster<br />

mit den Metadaten der Assembly geöffnet. Zeigen Sie die Zeile AssemblyCompanyAttribute<br />

an, die wie folgt aussehen sollte:<br />

.custom instance void<br />

[mscorlib]System.Reflection.AssemblyCompanyAttribute::.ctor(string)<br />

= ( 01 00 16 41 63 6D 65 20 52 6F 63 6B 65 74 20 53 // ...Acme Rocket S<br />

6C 65 64 2C 20 49 6E 63 2E 00 00 ) // led, Inc...<br />

15-6 Kapitel 15


Der Inhalt wird zwar in Hexadezimaldarstellung repräsentiert, doch Sie<br />

sehen, dass die Metadaten Ihre Änderungen am Projekt widerspiegeln.<br />

Assemblies<br />

Assemblies sind die grundlegenden Bausteine, aus denen .<strong>NET</strong>-<br />

Anwendungen konstruiert werden, und diese wiederum bilden die grundlegende<br />

Einheit für Weitergabe und Versionszuweisung. Assemblies enthalten<br />

IL-Code, Metadaten mit Informationen über die Assembly und deren Inhalte<br />

sowie weitere Dateien, die für die Ausführung zur Laufzeit notwendig sind.<br />

Eine Assembly ist daher wesentlich selbstständiger als eine übliche unter<br />

Windows ausführbare Datei oder ein COM-Objekt, da keine Abhängigkeiten<br />

von externen Informationsquellen wie etwa der Windows-Registrierung existieren.<br />

Jeder .<strong>NET</strong>-Typ ist Teil einer Assembly, und kein .<strong>NET</strong>-Typ kann<br />

außerhalb einer Assembly existieren.<br />

Es wurde gerade erwähnt, dass Assemblies die grundlegenden Einheiten in<br />

der .<strong>NET</strong>-Welt darstellen. <strong>Die</strong>s gilt in vielerlei Hinsicht:<br />

? Versionszuweisung. <strong>Die</strong> Assembly ist die kleinste Einheit, für die eine<br />

Versionszuweisung erfolgt, und das Assembly-Manifest beschreibt die<br />

Version der Assembly zusammen mit den Versionen aller sonstigen Assemblies,<br />

auf denen sie basiert. Anhand dieser Informationen kann überprüft<br />

werden, dass zur Laufzeit keine Komponenten mit falschen Ve rsionsinformationen<br />

verwendet werden.<br />

? Weitergabe. Assemblies werden nur bei Bedarf geladen, und sie sind<br />

daher insbesondere für verteilte Anwendungen geeignet.<br />

? Typ. <strong>Die</strong> Identität eines Typs umfasst auch die Assembly, in der er existiert.<br />

Zwei identisch benannte Typen, die in unterschiedlichen Assemblies<br />

existieren, werden als verschiedene Typen angesehen.<br />

? Sicherheit. Es ist die Assembly-Grenze, an der Sicherheitsberechtigungen<br />

geprüft werden.<br />

<strong>Die</strong> Namespaces <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong><br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> besteht aus einer Menge von<br />

Klassen, Schnittstellen, Strukturen und Enumerationen, die in fast 100 Namespaces<br />

enthalten sind. <strong>Die</strong>ser Abschnitt erläutert zunächst, wie Sie Name-<br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> 15-7


Hinweis<br />

spaces in verwaltetem C++-Code verwenden, und beschreibt dann die wichtigsten<br />

.<strong>NET</strong>-Namespaces samt deren Funktion und Inhalts.<br />

Sie haben .<strong>NET</strong>-Namespaces schon in verwaltetem C++-Code verwendet,<br />

wenn Sie das C++-Schlüsselwort using wie im folgenden Beispiel eingesetzt<br />

haben:<br />

using namespace System::Collections;<br />

Wie traditionelle C++-Namespaces bieten auch .<strong>NET</strong>-Namespaces eine zusätzliche<br />

Ebene zur Unterscheidung von Gültigkeitsbereichen, die Sie bei der<br />

Organisation <strong>des</strong> Co<strong>des</strong> und der Vermeidung von Doppelnamen unterstützt.<br />

Zwei identisch benannte Klassen können in einem Programm zusammen<br />

verwendet werden, solange sie zu verschiedenen Namespaces gehören. Enthält<br />

ein Typname die Namespace-Information, dann handelt es sich um den<br />

voll qualifizierten Namen, wie es das folgende Beispiel zeigt:<br />

System::Collections::ArrayList // die Klasse ArrayList aus<br />

// System::Collections<br />

System::Threading::Thread // die Klasse Thread aus System::Threading<br />

Namespace-Namen bestehen in .<strong>NET</strong> gewöhnlich aus mehreren Wörtern. In<br />

verwaltetem C++ werden die Namenskomponenten durch den Operator ::<br />

getrennt, in anderen .<strong>NET</strong>-Sprachen wie C# und Visual Basic dagegen durch<br />

einen Punkt (.). Das obige Beispiel würde in Visual Basic daher folgendermaßen<br />

lauten:<br />

System.Collections.ArrayList<br />

System.Threading.Thread<br />

Alle Klassen, Schnittstellen, Strukturen und Enumerationen aus der <strong>Klassenbibliothek</strong><br />

<strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> gehören zu einem Namespace. Microsoft<br />

stellt Namespaces bereit, die entweder mit dem Präfix System oder mit Microsoft<br />

beginnen. System weist darauf hin, dass der Namespace als Teil der <strong>Klassenbibliothek</strong><br />

<strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> entwickelt wurde, während Microsoft auf<br />

die Entwicklung durch andere Produktgruppen innerhalb von Microsoft verweist.<br />

Namespace-Namen dürfen beliebig viele Komponenten enthalten, doch Namen<br />

mit den gleichen Stammkomponenten sind nicht durch eine hierarchische<br />

Beziehung miteinander verknüpft. Der hierarchische Aufbau von Namespace-Namen<br />

bietet Ihnen einfach eine Möglichkeit, Ihre Klassen zu organisieren.<br />

System::Collections::Specialized und System::Collections enthalten<br />

beide Auflistungen, stehen jedoch in keiner anderen Beziehung zueinander.<br />

Ein Hinweis für Java-Programmierer: .<strong>NET</strong>-Namespaces ähneln zwar Java-<br />

Paketnamen, doch es gibt im Gegensatz zu Java keine Beziehung zwischen<br />

Namespace-Namen und Verzeichnispfaden.<br />

15-8 Kapitel 15


Es ist nicht erforderlich, dass alle Klassen eines Namespace in der gleichen<br />

DLL definiert sind oder dass eine einzige DLL lediglich Klassen eines einzelnen<br />

Namespace enthält.<br />

Namespaces in C++-Programmen verwenden<br />

Verwaltete C++-Programme verwenden die Präprozessordirektive #using, um<br />

Metadaten mit den verwalteten Erweiterungen für C++ in ein Programm zu<br />

importieren. Denken Sie daran, dass es sich bei Metadaten um Informationen<br />

handelt, die die Typen in einer Assembly beschreiben, wobei die voll qualifizierten<br />

Namen aller Typen darin enthalten sind. Angenommen, der Compiler<br />

trifft auf eine Zeile wie die Folgende:<br />

#using <br />

Er lädt die DLL und liest die Metadaten aller darin definierten Typen. Da<br />

mscorlib.dll den Hauptteil der .<strong>NET</strong> <strong>Framework</strong>-Klassen enthält, werden<br />

hiermit die Metadaten von sehr vielen Typen geladen.<br />

Zum aktuellen Zeitpunkt können Sie lediglich #using verwenden, um auf<br />

Assemblies zu verweisen, die in DLLs definiert sind. <strong>Die</strong>se Einschränkung<br />

könnte zukünftig aufgehoben werden, doch bisher sind nur Verweise auf<br />

prozessinterne Komponenten erlaubt.<br />

Das Schlüsselwort #using bedeutet, dass Sie wissen müssen, welche DLL die<br />

benötigten Klassen enthält. Normalerweise stellt die Onlinehilfe die übliche<br />

Quelle für diese Information dar. Wann immer ein Namespace in den folgenden<br />

Abschnitten dieses Kapitels erwähnt wird, wird auch <strong>des</strong>sen DLL genannt.<br />

Einige der voll qualifizierten Namen können sehr lang werden. Üblicherweise<br />

wird daher eine traditionelle Direktive using verwendet, um Namespace-<br />

Namen anzugeben. Sie können also auch nicht qualifizierte Namen verwenden,<br />

wie das folgende Beispiel zeigt:<br />

// <strong>Die</strong> Metadaten von MSCORLIB lesen<br />

#using <br />

// Alle Namen importieren<br />

using namespace System::Collections;<br />

// Nun können Sie ArrayList ohne Qualifikation verwenden<br />

ArrayList* pal = new ArrayList();<br />

Hinweis<br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> 15-9


Der Namespace System<br />

Der in mscorlib.dll definierte Namespace System enthält viele grundlegende<br />

Klassen, darunter die Folgenden:<br />

? Basisklassen für häufig verwendete Werte und Verweistypen sowie die<br />

Basisklasse für Arrays<br />

? Ereignisse und Ereignisbehandlungsroutinen<br />

? Delegaten und Schnittstellen<br />

? Attribute<br />

? Ausnahmen<br />

? Mathematische Operationen<br />

? Verwaltung der Anwendungsumgebung<br />

? Garbage Collection<br />

? Lokaler und Remote-Programmaufruf<br />

? Datentypkonvertierung<br />

Sie haben schon viele Typen aus System in früheren Kapiteln kennen gelernt.<br />

Da einige der anderen Klassen weniger bedeutend sind, werden sie nicht<br />

detailliert vorgestellt. <strong>Die</strong> folgenden Abschnitte beschreiben einige Aspekte<br />

einzelner Klassen aus System.<br />

Basistypen<br />

System implementiert alle Basistypen, die vom Common Type System definiert<br />

werden. <strong>Die</strong> folgende Tabelle, die Sie schon aus Kapitel 9 kennen, listet<br />

diese Typen auf.<br />

Wertetyp Beschreibung Äquivalenter verwalteter<br />

C++-Typ<br />

Byte Nicht signierte 8-Bit-Ganzzahl char<br />

SByte Signierte 8-Bit-Ganzzahl signed char<br />

Int16 Signierte 16-Bit-Ganzzahl short<br />

Int32 Signierte 32-Bit-Ganzzahl int or long<br />

Int64 Signierte 64-Bit-Ganzzahl __int64<br />

15-10 Kapitel 15


UInt16 Nicht signierte 16-Bit-Ganzzahl unsigned short<br />

UInt32 Nicht signierte 32-Bit-Ganzzahl unsigned int oder<br />

unsigned long<br />

UInt64 Nicht signierte 64-Bit-Ganzzahl unsigned __int64<br />

Single 32-Bit-Gleitkommazahl einfacher<br />

Genauigkeit<br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> 15-11<br />

float<br />

Double 64-Bit-Double-Gleitkommazahl double<br />

Boolean Boolescher Wert bool<br />

Char 16-Bit-Unicode-Zeichen wchar_t<br />

Decimal 96-Bit-Dezimalwert Decimal<br />

IntPtr Signierte Ganzzahl, deren Größe plattformabhängig<br />

ist<br />

UIntPtr Nicht signierte Ganzzahl, deren Größe<br />

plattformabhängig ist<br />

Kein integrierter Typ<br />

Kein integrierter Typ<br />

Beachten Sie, dass die nicht signierten Ganzzahltypen und SByte nicht CLSkompatibel<br />

sind. Erstellen Sie Code, der von anderen .<strong>NET</strong>-Sprachen verwendet<br />

werden soll, dann vermeiden Sie diese Typen.<br />

Alle .<strong>NET</strong>-Sprachen bilden diese Typen auf native Typen ab. Verwaltetes<br />

C++ bildet etwa int auf System::Int32 ab, aber Sie können die Typen ebenso<br />

direkt verwenden.<br />

Gleitkommatypen<br />

<strong>Die</strong> Typen Single und Double implementieren IEEE-754-Gleitkommaarithmetik.<br />

<strong>Die</strong>s bedeutet für nicht initialisierte Werte, dass jede Operation ein<br />

definiertes Ergebnis besitzt und Sie bei Gleitkommaberechnungen nie eine<br />

Division durch Null erhalten; möglich ist nur eine Zahl bzw. unendlich. <strong>Die</strong><br />

Gleitkommaklassen enthalten Werte, die positive und negative Unendlichkeit<br />

sowie »keine Zahl« (»not a number«) repräsentieren, und sie stellen Methoden<br />

bereit, mit denen geprüft werden kann, ob einer dieser Werte vorliegt,<br />

wie das folgende Beispiel zeigt:<br />

double top = 1.0;<br />

double bottom = 0.0;<br />

double result = top/bottom;<br />

if (result == Double::PositiveInfinity)<br />

Console::WriteLine("+unendlich");


else if (result == Double::NegativeInfinity)<br />

Console::WriteLine("-unendlich");<br />

else if (result == Double::Nan)<br />

Console::WriteLine("Keine Zahl");<br />

<strong>Die</strong> Collections-Namespaces<br />

In Kapitel 12 haben Sie bereits die Auflistungsnamespaces System::Collections<br />

und System::Collections::Specialized kennen gelernt. System::Collections<br />

ist in mscorlib.dll implementiert, System::Collections::Specialized<br />

dagegen in system.dll. Wenn Sie beide Namespaces<br />

verwenden wollen, verwenden Sie zwei #using-Anweisungen wie<br />

folgt:<br />

#using <br />

#using <br />

<strong>Die</strong> folgende Tabelle beschreibt die Hauptklassen, die im Namespace System::Collections<br />

enthalten sind.<br />

Klasse Beschreibung<br />

ArrayList Ein Array, <strong>des</strong>sen Größe dynamisch verändert werden kann.<br />

BitArray Eine Klasse, die Boolesche Werte als einzelne Bits einer Ganzzahl<br />

speichert.<br />

Hashtable Eine Hashtabelle, in der Objekte nach dem Hashschlüssel sortiert<br />

gespeichert werden.<br />

Queue Eine Liste, in die Objekte an einem Ende hinzugefügt und am<br />

anderen Ende ausgelesen werden.<br />

SortedList Eine verknüpfte Liste, deren Elemente sortiert sind.<br />

Stack Ein First in-Last out-Stack.<br />

<strong>Die</strong> folgende Tabelle beschreibt die Hauptklassen <strong>des</strong> Namespace System::Collections::Specialized.<br />

Klasse Beschreibung<br />

BitVector32 Eine Klasse, die Boolesche Werte als einzelne Bits<br />

einer 32-Bit-Ganzzahl speichert.<br />

ListDictionary Ein Wörterbuch, das unter Verwendung einer<br />

einfach verknüpften Liste implementiert ist.<br />

NameValueCollection Eine sortierte Auflistung von Zeichenfolgenschlüsseln<br />

und -werten.<br />

15-12 Kapitel 15


StringCollection Eine nicht sortierte Auflistung von Zeichenfolgen.<br />

StringDictionary Eine Hashtabelle, wobei der Schlüssel vom Typ<br />

Zeichenfolge und kein Objekt ist.<br />

StringEnumerator Ein Enumerator für die Zusammenarbeit mit<br />

StringCollection.<br />

<strong>Die</strong> Collections-Schnittstellen<br />

Der Namespace System::Collections definiert auch einige Schnittstellen, die<br />

zur Definition <strong>des</strong> Verhaltens der Auflistungsklasse dienen. <strong>Die</strong> Auflistungsklassen<br />

selbst implementieren eine oder auch mehrere dieser Schnittstellen,<br />

und Sie können sie als Basis verwenden, wenn Sie eigene Auflistungsklassen<br />

erstellen. <strong>Die</strong> folgende Tabelle beschreibt die Hauptschnittstellen.<br />

Schnittstelle Beschreibung<br />

ICollection Definiert die Größe, den Enumerator und Synchonisierungsmethoden<br />

für alle Auflistungen.<br />

IComparer Definiert eine Methode für den Vergleich von zwei<br />

Objekten.<br />

IDictionary Wird von Auflistungen implementiert, die Schlüssel/Wert-Paare<br />

verwalten, wie etwa HashTable<br />

und ListDictionary.<br />

IDictionaryEnumerator Definiert Methoden für die Enumeration von Elementen<br />

in einem Wörterbuch.<br />

IEnumerable Definiert die Methode GetEnumerator, die einen<br />

IEnumerator zurückgibt. Wird von fast allen Auflistungen<br />

implementiert.<br />

IEnumerator Definiert die Eigenschaften und Methoden von<br />

Enumeratoren.<br />

IHashCodeProvider Wird von Klassen implementiert, die Hashcodewerte<br />

bereitstellen.<br />

IList Wird von Klassen implementiert, die indizierte<br />

Objektauflistungen definieren.<br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> 15-13


Der Diagnostics-Namespace<br />

System::Diagnostics stellt Klassen für die folgenden Aufgaben bereit:<br />

? Verfolgen der Programmausführung<br />

? Interaktion mit dem Debugger<br />

? Verwenden <strong>des</strong> Systemereignisprotokolls<br />

? Starten von Systemprozessen<br />

? Überwachen der Systemleistung<br />

Alle Klassen in System::Diagnostics sind in system.dll implementiert.<br />

Der IO-Namespace<br />

Der in mscorlib.dll definierte Namespace System::IO stellt die Klassen bereit,<br />

die die .<strong>NET</strong>-Ein-/Ausgabefunktionalität implementieren. <strong>Die</strong> folgende Tabelle<br />

beschreibt die Hauptklassen in diesem Namespace.<br />

Klasse Beschreibung<br />

BinaryReader Liest primitive .<strong>NET</strong>-Typen aus einem Bytestream.<br />

BinaryWriter Schreibt primitive .<strong>NET</strong>-Typen in einen Bytestream.<br />

Directory Enthält statische Methoden für die Verzeichnisverarbeitung.<br />

DirectoryInfo Repräsentiert einen Verzeichnispfad und enthält Methoden<br />

für <strong>des</strong>sen Verarbeitung.<br />

File Enthält statische Methoden für die Dateiverarbeitung.<br />

FileInfo Repräsentiert einen Dateipfad und enthält Methoden für<br />

<strong>des</strong>sen Verarbeitung.<br />

FileStream Liest und schreibt unter Verwendung von Streams in<br />

Dateien.<br />

FileSystemInfo <strong>Die</strong> Basisklasse für FileInfo und DirectoryInfo<br />

FileSystemWatcher<br />

Überwacht Änderungen im Dateisystem und löst Ereignisse<br />

aus, wenn eine Änderung auftritt.<br />

IOException <strong>Die</strong>se Ausnahme tritt im Fall eines Ein-/Ausgabefehlers<br />

auf.<br />

15-14 Kapitel 15


MemoryStream Liest und schreibt Bytestreams aus dem und in den Speicher.<br />

Path Repräsentiert Verzeichniszeichenfolgen auf eine plattformunabhängige<br />

Weise.<br />

Stream <strong>Die</strong> abstrakte Basis für die Streamklassen.<br />

StreamReader Liest Unicode-Zeichen aus einem Bytestream.<br />

StreamWriter Schreibt Unicode-Zeichen in einen Bytestream.<br />

StringReader Liest Unicode-Zeichen aus einer Zeichenfolge.<br />

StringWriter Schreibt Unicode-Zeichen in eine Zeichenfolge.<br />

TextReader <strong>Die</strong> Basisklasse für StreamReader und StringReader.<br />

TextWriter <strong>Die</strong> Basisklasse für StreamWriter und StringWriter.<br />

Wie alle Klassen der <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> sind auch diese<br />

Klassen sprachenunabhängig. Sie können zusammen mit den C++-<br />

Streamklassen oder statt<strong>des</strong>sen eingesetzt werden. Einige der System::IO-<br />

Klassen werden in Kapitel 18 beschrieben.<br />

<strong>Die</strong> Drawing-Namespaces<br />

Einige dieser Namespaces stellen die gesamte Grafikfunktionalität für das<br />

.<strong>NET</strong> <strong>Framework</strong> bereit:<br />

? System::Drawing beinhaltet die grundlegende GDI+-<br />

Zeichenfunktionalität. <strong>Die</strong>ser Namespace stellt einfache zweidimensionale<br />

pixelorientierte Grafikfunktionen bereit.<br />

? System::Drawing::Design erweitert System::Drawing um Funktionalität<br />

zur Entwurfszeit, sodass Sie die Visual Studio .<strong>NET</strong>-Schnittstelle um benutzerdefinierte<br />

Elemente erweitern können.<br />

? System::Drawing:Drawing2D stellt leistungsfähigere zweidimensionale<br />

Grafik- und Vektorgrafikfunktionen bereit.<br />

? System::Drawing::Imaging ergänzt GDI+ um Bildverarbeitungsfunktionalität.<br />

? System::Drawing::Printing ermöglicht Ihnen, den Druckvorgang anzupassen<br />

und zu steuern.<br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> 15-15


? System::Drawing::Text ergänzt GDI+ um leistungsfähige Typographieunterstützung,<br />

darunter die Fähigkeit, Auflistungen von Schriften zu erstellen<br />

und zu verwenden.<br />

<strong>Die</strong> ursprüngliche Menge der Windows-Grafikroutinen wurde GDI (Graphical<br />

Device Interface) genannt. <strong>Die</strong>se Schnittstelle stellte eine sehr einfache<br />

Menge zweidimensionaler Grafikprimitiven bereit, die Ihnen das Zeichnen<br />

von Linien, Kreisen, Rechtecken und anderen einfachen Formen sowie<br />

Textzeichenfolgen ermöglichte. Das .<strong>NET</strong> <strong>Framework</strong> basiert auf dieser<br />

Funktionalität, und <strong>des</strong>sen Grafikbibliothek trägt den Namen GDI+.<br />

Weitere Informationen zu GDI+ erhalten Sie in Kapitel 18.<br />

Der Forms-Namespace<br />

Visual Basic-Programmierer sind seit geraumer Zeit an die Programmierung<br />

mit Formularen gewöhnt. GUI-Anwendungen in Visual Basic bestehen aus<br />

einigen Formularen, die jeweils aus einem Fenster auf oberster Ebene bestehen.<br />

<strong>Die</strong> Entwickler wählen Steuerelemente, wie Schaltflächen und Listenfelder,<br />

aus der Toolbox und ordnen sie im Formular an. Je<strong>des</strong> Steuerelement<br />

besitzt zugehörige Eigenschaften und Methoden. Der Eigenschafteneditor von<br />

Visual Basic ermöglicht das interaktive Ändern von Eigenschaften zur Entwurfszeit.<br />

Sowohl auf Methoden als auch auf Eigenschaften kann zur Laufzeit<br />

aus dem Code heraus zugegriffen werden.<br />

Der Namespace System::Windows::Forms, der in den Kapiteln 16 und 17<br />

vorgestellt wird, stellt allen .<strong>NET</strong>-Sprachen einschließlich C++ die Grundlagen<br />

für eine formularbasierte Entwicklung im Stil von Visual Basic zur Verfügung.<br />

<strong>Die</strong>ser Namespace ist umfangreich und enthält über 300 Klassen,<br />

Strukturen und Enumerationen. <strong>Die</strong> folgende Tabelle beschreibt einige der<br />

wichtigsten Klassen, um Ihnen einen Überblick darüber zu verschaffen, was<br />

zur Verfügung steht.<br />

Klasse Beschreibung<br />

Application Stellt Methoden und Eigenschaften für die Verwaltung<br />

von Anwendungen bereit.<br />

AxHost Kapselt ActiveX-Steuerelemente, sodass sie als Windows-Formularsteuerelemente<br />

verwendet werden können.<br />

Button Repräsentiert ein Windows-Steuerelement Button.<br />

CheckBox Repräsentiert ein Windows-Steuerelement CheckBox.<br />

CheckedListBox Repräsentiert ein Steuerelement ListBox, in dem links<br />

15-16 Kapitel 15


von jedem Element ein Kontrollkästchen angeordnet ist.<br />

Clipboard Ermöglicht den Zugriff auf die Systemzwischenablage.<br />

ColorDialog Zeigt ein Standarddialogfeld zur Auswahl von Farben<br />

an.<br />

ComboBox Repräsentiert ein Windows-Steuerelement ComboBox.<br />

Control <strong>Die</strong> Basisklasse für alle Steuerelemente.<br />

Cursor Repräsentiert einen Cursor.<br />

DataGrid Zeigt Microsoft ADO.<strong>NET</strong>-Daten in einem verschiebbaren<br />

Raster an.<br />

DateTimePicker Repräsentiert ein Windows-Steuerelement zur Auswahl<br />

von Datum und Zeit.<br />

DomainUpDown Repräsentiert ein Aufwärts/Abwärts-Windows-<br />

Steuerelement zur Anzeige von Zeichenfolgenwerten.<br />

FileDialog Zeigt ein Standarddialogfeld zum Öffnen oder Speichern<br />

von Dateien an.<br />

Form Repräsentiert ein Fenster oder ein Dialogfeld, das ein<br />

Teil der Benutzerschnittstelle einer Anwendung ist.<br />

Label Repräsentiert ein Windows-Steuerelement Label.<br />

ListBox Repräsentiert ein Windows-Steuerelement ListBox.<br />

ListView Zeigt eine Liste von Elementen in einer von vier Ansichten<br />

an.<br />

Panel Repräsentiert ein Windows-Steuerelement Panel.<br />

RichTextBox Repräsentiert ein Windows-Steuerelement RichTextBox.<br />

StatusBar Repräsentiert ein Windows-Steuerelement StatusBar.<br />

TextBox Repräsentiert ein Windows-Steuerelement Textbox.<br />

ToolBar Repräsentiert ein Windows-Steuerelement ToolBar.<br />

<strong>Die</strong> Net-Namespaces<br />

<strong>Die</strong> Netzwerkunterstützung wird von den Klassen System::Net und System::Net:Sockets<br />

bereitgestellt. System::Net bietet eine Schnittstelle zu vielen<br />

der heute üblichen Protokolle, wozu die Manipulation von IP-Adressen,<br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> 15-17


die Ausführung von DNS-Lookups, die Kommunikation mit HTTP- und<br />

FTP-Servern, die Verwaltung von Cookies und die Authentifizierung gehören.<br />

System::Net::Sockets stellt eine Implementierung <strong>des</strong> Protokolls Berkeley<br />

Sockets sowie einen .<strong>NET</strong>-Wrapper für die Windows WinSock-API bereit.<br />

<strong>Die</strong> XML-Namespaces<br />

XML wird im .<strong>NET</strong> <strong>Framework</strong> häufig verwendet, und daher unterstützen<br />

verschiedene Namespaces die Erstellung und Bearbeitung von XML:<br />

? System::Xml stellt die Basisklassen für die Verarbeitung von XML zur<br />

Verfügung.<br />

? System::Xml::Schema bietet Unterstützung für XML Schemas.<br />

? System::Xml::Serialization ermöglicht die Serialisierung von .<strong>NET</strong>-<br />

Objekten nach und von XML.<br />

? System::Xml::XPath enthält den XPath-Parser und die Evaluation Engine.<br />

? System::Xml::Xsl enthält den XSL-Prozessor.<br />

<strong>Die</strong> Verwendung dieser Klassen ermöglicht es, XML in jeder beliebigen<br />

Weise einzusetzen und zu verarbeiten. Dank dieser Klassen wird das .<strong>NET</strong><br />

<strong>Framework</strong> zu einer der produktivsten Umgebungen für die XML-<br />

Programmierung.<br />

<strong>Die</strong> Data-Namespaces<br />

<strong>Die</strong> Namespaces System::Data enthalten die Klassen, die ADO.<strong>NET</strong> implementieren,<br />

eine neue Version der Technologie Microsoft Active Data Object,<br />

die für die Zusammenarbeit mit dem .<strong>NET</strong> <strong>Framework</strong> optimiert wurde. Sie<br />

ermöglichen Ihnen die Erstellung von Komponenten, die Daten aus einer<br />

Vielzahl von Datenquellen verwalten. Daten aus unterschiedlichen Datenquellen<br />

werden von Datenprovidern bereitgestellt, wobei zwei davon mit dem<br />

.<strong>NET</strong> <strong>Framework</strong> ausgeliefert werden. Der Datenprovider OLEDB verwendet<br />

Microsoft COM-basierte Technologie, die die Verwendung vieler verschiedener<br />

Datenquellen wie etwa relationale Datenbanktabellen, Excel-<br />

Arbeitsblätter und sogar Textdateien ermöglicht, als handelte es sich um Datenbanken.<br />

Der Datenprovider SQLClient arbeitet mit Daten von Microsoft<br />

SQL Server.<br />

<strong>Die</strong> wichtigste Klasse der System::Data-Namespaces ist DataSet, die einen<br />

Speichercache mit Daten repräsentiert, die aus einer Datenquelle abgefragt<br />

15-18 Kapitel 15


wurden. Ein DataSet besteht aus einem oder aus mehreren DataTable-<br />

Objekten, wobei diese wiederum aus einer Auflistung von DataColumn-<br />

Objekten bestehen.<br />

<strong>Die</strong> Web-Namespaces<br />

Da einer der Hauptgründe für die Einführung <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> in der<br />

einfacheren Erstellung von Webanwendungen liegt, ist es wohl nicht überraschend,<br />

dass das .<strong>NET</strong> <strong>Framework</strong> eine Anzahl von Namespaces enthält, die<br />

sich auf die Webprogrammierung beziehen. Sie stehen alle in einer Beziehung<br />

zu Microsoft ASP.<strong>NET</strong>, der aktuellsten Version der Technologie Microsoft<br />

Active Server Pages, die für die Arbeit in der .<strong>NET</strong>-Umgebung optimiert<br />

wurde.<br />

Zu den wichtigsten Web-Namespaces gehören die Folgenden:<br />

? System::Web stellt die grundlegende Funktionalität für Browser-To-<br />

Server-Kommunikation über HTTP bereit, einschließlich der Klassen<br />

HttpRequest und HttpResponse, die einer ASP.<strong>NET</strong>-Seite den Datenaustausch<br />

mit dem Client über HTTP ermöglichen.<br />

? System::Web::Mail erlaubt Ihnen das Aufbereiten und Versenden von E-<br />

Mail-Anhängen unter Verwendung <strong>des</strong> SMTP-<strong>Die</strong>nstes, der in Windows<br />

2000 integriert ist.<br />

? System::Web::Security stellt Klassen bereit, die die Sicherheit in<br />

ASP.<strong>NET</strong> implementieren.<br />

? System::Web::Services stellt die Klassen bereit, die die Erstellung von<br />

Web-<strong>Die</strong>nsten ermöglichen.<br />

? System::Web::UI enthält alle Klassen für die Erstellung von serverseitigen<br />

Steuerelementen.<br />

<strong>Die</strong> Leistungsmerkmale, die von diesen beiden Namespaces zur Verfügung<br />

werden, verdienen besonderer Erwähnung. Insbesondere die Webdienste<br />

gehören zu den leistungsfähigen neuen Eigenschaften <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong>.<br />

Ein Webdienst ist eine programmierbare Einheit, die auf einem Webserver<br />

existiert und den Zugriff über Internetstandardprotokolle erlaubt. In der Praxis<br />

bedeutet dies, dass Sie auf einem Webserver eine Funktion bereitstellen können,<br />

die von anderen aufgerufen werden kann. <strong>Die</strong> Kommunikation zwischen<br />

Client und Server basiert auf Standardprotokollen wie HTTP, und die Daten<br />

werden gewöhnlich vom Webdienst im XML-Format unter Verwendung von<br />

SOAP (Simple Object Access Protocol) weitergegeben. <strong>Die</strong> Verwendung von<br />

XML über HTTP ermöglicht Clients, die in beliebigen Programmiersprachen<br />

auf beliebigen Plattformen erstellt worden sind, den einfachen Zugriff auf<br />

Webdienste. Außerdem kann abgefragt werden, welche <strong>Die</strong>nste ein Webser-<br />

<strong>Die</strong> <strong>Klassenbibliothek</strong> <strong>des</strong> .<strong>NET</strong> <strong>Framework</strong> 15-19


ver unterstützt, und es ist in Visual Studio .<strong>NET</strong> sehr einfach, Clients zu erstellen,<br />

die Webdienste verwenden.<br />

Der Namespace System::Web::UI ermöglicht Ihnen die Erstellung von serverseitigen<br />

Steuerelementen. Sie programmieren diese Steuerelemente wie normale<br />

Steuerelemente, doch ihr Code wird auf dem Server ausgeführt. Der<br />

Namespace System::Web::UI::HtmlControls enthält Klassen, die HTML-<br />

Serversteuerelemente repräsentieren. <strong>Die</strong>se sind direkt auf HTML-<br />

Standardelemente wie Schaltflächen und Formulare abbildbar. System::Web::UI::WebControls<br />

ist abstrakter und unterstützt die Programmierung<br />

von serverseitigen Steuerelementen, die nicht direkt auf HTML abbildbar<br />

sind.<br />

Zusammenfassung<br />

Möchten Sie dann gehen Sie wie folgt vor:<br />

Datenstrukturen wie etwa<br />

dynamische Arrays, Listen<br />

und Hashtabellen verwenden,<br />

eine formularbasierte Anwendung<br />

erstellen,<br />

Verwenden Sie die Klassen der Namespaces<br />

System::Windows::Collections und<br />

System::Windows::Collections::Specialized.<br />

Verwenden Sie die Klassen System::Windows::Forms<br />

und leiten eine<br />

Klasse aus System::Windows::Forms::Form<br />

ab.<br />

mit XML arbeiten, Sehen Sie sich die Klassen <strong>des</strong> Namespace<br />

System::XML an.<br />

die Programmausführung<br />

verfolgen, mit dem Ereignisprotokoll<br />

interagieren oder<br />

die Systemleistung überwachen,<br />

unter Verwendung von<br />

ADO.<strong>NET</strong> mit Datenbanken<br />

arbeiten,<br />

Verwenden Sie die Klassen <strong>des</strong> Namespace<br />

System::Diagnostics.<br />

Sehen Sie sich die Namespaces System::Data<br />

an.<br />

15-20 Kapitel 15

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!