Die Klassenbibliothek des .NET Framework
Die Klassenbibliothek des .NET Framework
Die Klassenbibliothek des .NET Framework
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