"Microsoft .NET is a set of Microsoft software technologies for connecting your world of information, people, systems, and devices." [Microsoft(6)]
.NET ist seit ca. zwei Jahren ein Begriff, der in fast jeder Ausgabe der führenden Computermagazine zu finden ist. Trotz dessen ist der Begriff an sich recht schwammig und es fällt schwer eine präzise Definition zu finden. Das liegt daran, dass .NET eine Mischung aus Marketing, Vision aber auch Realität ist. Zudem besteht die Microsoft .NET Initiative aus einer Vielzahl von Bereichen, die nachfolgend in der Grafik (Abb 2.1) aufgelistet sind. In dieser Ausarbeitung beschränke ich mich auf das .NET Framework (.NET Laufzeitumgebung), auf der die Sprache C# aufsetzt.
Übersicht über die
Komponenten von .NET - Abbildung 2.1 |
Zwar steht hier unter dem .NET OS immer noch Windows, doch die Ausrichtung von .NET ist ausdrücklich betriebssystemunabhängig. Hierzu laufen, wie bereits erwähnt Projekte, die versuchen .NET auf andere Plattformen zu portieren [www.go-mono.com]. Ein C#- und ein JIT-Compiler für Linux existieren bereits.
Das .NET Framework selbst besteht wiederum aus verschiedenen Blöcken (Abb 2.2) - diese Blöcke sind von einer bestimmten Programmiersprache unabhängig und können von allen .NET-Sprachen verwendet werden. Das .NET-Framework ist eine große Bibliothek mit einem Umfang von über 7.000 Klassen und ca. 150.000 Methoden und Eigenschaften. Da fällt es nicht immer leicht den Überblick zu bewahren. Man kann das .NET Framework als einen großen Werkzeugkasten begreifen, aus dem man sich nach belieben bedienen und so seine eigenen Anwendungen zusammenbauen kann.
Der grobe Aufbau des .NET Frameworks
- Abbildung 2.2 |
Das .NET Framework bietet von sich aus folgende Eigenschaften:
Alle Sprachen kompilieren
in die IL Abbildung 2.3 |
Wie zuvor erwähnt ist die CLI standardisiert (siehe
Kapitel 1). Zur Common Language Infrastructure gehören unter anderem
das Common Type System (CTS) sowie die Common Language Specification (CLS).
Das CTS legt fest, welche Datentypen in einer Umgebung zur Verfügung stehen
und wie diese Typen aufgebaut sind. Das bezieht sich nicht nur auf primitive
Typen wie Integer, sondern auch auf komplexe OOP-Typen wie Klassen oder Schnittstellen.
Grundsätzlich existieren im CTS nur zwei Arten von Typen: Werttypen und
Referenztypen. Alle anderen Typen sind nur speziellere Ableitungen.
In der CLS werden alle Minimalanforderungen an die .NET-Sprachen festgelegt
um die Sprachunabhängigkeit und Interoperabilität zu gewährleisten.
So sind beispielsweise Bezeichner in C# und C++ "case-sensitive" in
VisualBasic aber nicht. Sollen die Klassen sprachunabhängig bleiben so
muss sichergestellt werden, dass keine Bezeichner verwendet werden, die sich
nur in ihrer Schreibweise unterscheiden. Man kann den Compiler dazu bewegen
bei Nichteinhaltung der CLS-Spezifikationen eine Warnung zu generieren.
Die Common Language Runtime (CLR) legt die grundlegende Infrastruktur und Umgebung fest in der die Programmteile der verschiedenen Sprachen laufen. Abbildung 2.4 zeigt welche Aufgabe die CLR übernehmen muss.
Aufgaben der CLR - Abbildung
2.4 |
Beim Kompilieren einer .NET-Programmiersprache erzeugt der Compiler eine Datei, die den IL-Code und die Metadaten enthält. Bei Einhaltung der CLS ist es möglich eine Anwendung mit mehr als einer Programmiersprache zu erstellen, die dann in der Common Language Runtime abläuft.