ein Projekt von goloroden.de
Skip Navigation Linksguide to C# > Guide > Einführung in .NET

Einführung in .NET

Was ist .NET?

.NET ist eine Plattform von Microsoft zur Entwicklung und Ausführung von Anwendungen.

Da sich am Ende des vergangenen Jahrtausends zahlreiche Plattformen mit ihren jeweiligen Konzepten und Standards verbreitet hatten, wurde die Entwicklung von Anwendungen für Windows zunehmend komplexer und damit anspruchsvoller.

Nur die Windows-eigene Basis namens Win32 zu kennen, war bei weitem nicht mehr ausreichend, man musste sich zusätzlich mit COM, DCOM, Windows DNA, DirectX, ASP, ISAPI, VBA, WSH und zahlreichen anderen Technologien beschäftigen, um zeitgemäße Anwendungen entwickeln zu können.

Die Idee hinter .NET war, eine einheitliche und konsistent objektorientierte Plattform zu schaffen, die alle bestehenden Konzepte vereint. Insofern beerbt .NET gewissermaßen die genannten Plattformen, auch wenn diese - allein schon aus Gründen der Abwärtskompatibilität - zumindest vorerst weiterhin zur Verfügung stehen werden.

Um trotz dieser Revolution einen sanften Übergang zu ermöglichen, ist es möglich, .NET wie COM anzusprechen, und COM im Gegenzug aus .NET heraus zu nutzen. Daher kann .NET durchaus als eine Revolution mit evolutionärem Rahmenwerk bezeichnet werden.

Plattformunabhängigkeit

Die Grundlage von .NET bildet die Common Language Infrastructure - im folgenden als CLI abgekürzt - , eine Spezifikation, welche die plattform- und sprachunabhängige Entwicklung und Ausführung von Anwendungen beschreibt.

Die CLI wurde im August 2000 von Microsoft, Intel und Hewlett Packard bei der ECMA zur Standardisierung eingereicht und ein Jahr später, im Dezember 2001, unter dem Namen ECMA-335 als Standard verabschiedet. Da es sich bei der CLI um einen frei verfügbaren Standard handelt, kann potenziell von jedem Interessierten eine eigene Implementierung entwickelt werden.

.NET ist dabei die bekannteste und am weitesten verbreitete Implementierung der CLI, wobei es außer .NET an sich noch weitere Varianten gibt, die ebenfalls von Microsoft stammen: Das .NET Compact Framework zur Nutzung auf mobilen Geräten, das .NET Micro Framework für eingebettete Geräte und schließlich Rotor unter FreeBSD als Studie einer CLI-Implementierung auf einer anderen Plattform als Windows.

Die erste Version von .NET erschien am 13. Februar 2002 in Verbindung mit der dazugehörigen integrierten Entwicklungsumgebung - Visual Studio .NET. Bereits ein Jahr später folgten .NET 1.1 und Visual Studio .NET 2003, wobei diese Aktualisierungen neben einigen wenigen technischen Änderungen im wesentlichen Sicherheitsaktualisierungen enthielten.

Zudem war .NET 1.1 die erste Version von .NET, die nicht nur als zusätzliche Komponente zu Windows ausgeliefert wurde - diese Version ist standardmäßig in Windows Server 2003 enthalten.

Version 2.0 erschien weitere zweieinhalb Jahre später zusammen mit Visual Studio 2005 am 7. November 2005. Neben zahlreichen technischen Änderungen und Verbesserungen ist bemerkenswert, dass der Begriff .NET nicht mehr im Produktnamen von Visual Studio enthalten ist.

Am 6. November 2006 schließlich wurde .NET 3.0 veröffentlicht, das im Gegensatz zu Version 2.0 keine eigenständige Version im klassischen Sinne darstellt, sondern im Kern nach wie vor auf .NET 2.0 basiert und dieses lediglich um vier Komponenten erweitert: Die Windows Presentation Foundation, die Windows Communication Foundation, die Windows Workflow Foundation und Windows Card Space.

Wie bereits .NET 1.1 wird auch .NET 3.0 nicht nur als zusätzliche Komponente zu Windows ausgeliefert, sondern ist bereits in Windows Vista integriert.

Am 27. Februar 2008 wurde .NET 3.5 zusammen mit Visual Studio 2008 veröffentlicht. Wie bereits .NET 3.0 setzt auch .NET 3.5 auf der Version 2.0 von .NET auf und erweitert dieses um weitere Komponenten. Besonders hervorzuheben sind dabei die neue Version 3.0 von C# und eine in C# enthaltene integrierte Abfragesprache namens Linq.

Neben diesen Implementierungen der CLI durch Microsoft gibt es einige weitere Implementierungen, von denen vor allem Mono von Novell nennenswert ist. Mono war ursprünglich von Miguel de Icaza und dessen Firma Ximian entwickelt worden, die allerdings am 4. August 2003 von Novell übernommen wurde.

Am 30. Juni 2004 schließlich wurde Mono in Version 1.0 veröffentlicht und stellt seitdem eine interessante Alternative zu .NET dar, da es zum einen nicht nur Windows, sondern auch zahlreiche andere Betriebssysteme wie unter anderem Linux und Mac OS X unterstützt, und zum anderen als Opensource verfügbar ist.

Sprachunabhängigkeit

Die CLI beschreibt jedoch nicht nur die plattform-, sondern auch die sprachunabhängige Entwicklung und Ausführung von Anwendungen. Sprachunabhängig bedeutet dabei, dass es keine Rolle spielt, in welcher Programmiersprache eine Anwendung geschrieben wurde.

Für die Entwicklung unter Win32 gab es essenzielle Unterschiede zwischen den verschiedenen Programmiersprachen. Konnte beispielsweise COM aus Visual C++ uneingeschränkt genutzt werden, war dies in Visual Basic nur eingeschränkt möglich. Außerdem unterschieden sich die verschiedenen Sprachen in ihren jeweiligen Konventionen, so dass die erzeugten Anwendungen auch diesbezüglich nicht immer vollständig kompatibel zueinander waren.

Zudem war es nicht möglich, in verschiedenen Sprachen geschriebene Komponenten beliebig miteinander zu kombinieren. Das Resultat dieser Inkompatibilitäten war, dass Komponenten häufig in mehreren programmiersprachenspezifischen Varianten zur Verfügung standen.

In .NET ist die Kombination von Komponenten und Anwendungen hingegen uneingeschränkt möglich, was im wesentlichen der Verdienst der beiden wichtigsten Komponenten von .NET ist: Der Common Language Runtime - im folgenden als CLR abgekürzt - und der Framework Class Library - im folgenden als FCL abgekürzt.

Die CLR dient zur Ausführung von Anwendungen, wobei diese Anwendungen in Sprachen entwickelt worden sein müssen, die .NET als Zielplattform adressieren. All diesen Sprachen ist gemein, dass sie einen Unterstandard der CLI implementieren, nämlich das Common Language Subset - im folgenden als CLS abgekürzt. Das CLS beschreibt Eigenschaften, die zur CLR, und damit zu .NET, kompatible Sprachen aufweisen müssen.

Außerdem werden die erzeugten Anwendungen nicht - wie in klassischen Programmiersprachen - in Maschinensprache umgewandelt, die direkt vom Prozessor ausgeführt werden kann. Statt dessen wird eine für .NET spezifische Zwischensprache eingesetzt, die sogenannte Microsoft Intermediate Language - im folgenden als MSIL abgekürzt.

Erst zur Ausführungszeit werden die MSIL-Anweisungen in Maschinensprache umgesetzt, die dann auf die jeweils ausführende Hardwareplattform optimiert werden kann. Dies geschieht durch einen Compiler, der "just in time" arbeitet, also erst auf Anforderung und nur das jeweils Notwendige übersetzt, und daher auch als JIT-Compiler bezeichnet wird.

Da die Übersetzung während der Ausführung stattfindet, dauert der erste Aufruf einer .NET-Anwendung naturgemäß ein wenig länger als bei Anwendungen, die in klassischen Programmiersprachen geschrieben wurden. Die Optimierung des JIT-Compilers gleicht dies aber aus, so dass JIT-übersetzte Anwendungen in der Regel schneller ausgeführt werden können.

Die FCL - Framework Class Library - schließlich stellt eine Klassenbibliothek zur Verfügung, die einige tausend Klassen für häufig auftretende Aufgaben enthält und aus allen .NET-spezifischen Sprachen heraus genutzt werden kann. Da die FCL von der CLR bereitgestellt wird, bleiben Anwendungen für .NET trotz einem potenziell hohen Funktionsumfang verhältnismäßig kompakt, da diese die FCL nicht enthalten müssen.

Verwalteter Code

Außer der Anpassung an die ausführende Hardwareplattform hat die Verwendung einer Zwischensprache noch einen weiteren Grund. Die CLR kann nämlich die auszuführenden MSIL-Anweisungen vor der Übersetzung in Maschinensprache analysieren und potenziell eingreifen. Da der Code zur Ausführungszeit kontrolliert wird, bezeichnet man ihn als verwalteten Code.

Auf diese Weise kann die CLR unter anderem sicherstellen, dass Anwendungen nur auf Speicher zugreifen, auf den sie an dieser Stelle zugreifen dürfen. Zudem kann überprüft werden, auf welche Ressourcen eine Anwendung versucht zuzugreifen, wobei dies bei fehlender Berechtigung verhindert werden kann.

So kann Anwendungen, die aus nicht vertrauenswürdigen Quellen wie dem Internet stammen, zwar die prinzipielle Ausführung erlaubt, der Zugriff beispielsweise auf das Dateisystem aber verweigert werden. Diese Einschränkung des Zugriffs auf Ressourcen zur Laufzeit wird als Code Access Security - im folgenden als CAS abgekürzt - bezeichnet.

Schließlich führt die CLR von Zeit zu Zeit eine Speicherbereinigung durch, entfernt Code und Daten, die nicht mehr benötigt werden, und gibt damit wieder Speicher zur weiteren Verwendung frei. Diese Speicherbereinigung wird als Garbage Collection bezeichnet und im folgenden als GC abgekürzt.

Zusammengefasst gilt bei .NET also, dass Sicherheit höher priorisiert wird als eine möglichst schnelle Ausführung von Anwendungen um jeden Preis.

Erweiterungen

Zu diesem Grundgerüst von .NET, das aus der Common Language Runtime und der Framework Class Library besteht, gibt es einige Erweiterungen, die erwähnenswert sind. Diese gliedern sich im wesentlichen in vier Kategorien: Windowsanwendungen, Webanwendungen, Kommunikation und Datenverwaltung.

Für Windowsanwendungen sind zunächst GDI+ und Windows Forms zu nennen. Während GDI+ den objektorientierten und verwalteten Nachfolger der Grafikbibliothek GDI darstellt, lassen sich mit Windows Forms grafische Oberflächen mit den gängigen Steuerelementen erstellen.

Im Rahmen von .NET 3.0 wurde die Windows Presentation Foundation - im folgenden als WPF abgekürzt - eingeführt, die statt eines pixelorientierten Ansatzes einen vektororientierten Ansatz verfolgt und zudem über die auf XML basierende Sprache XAML genutzt werden kann.

Webanwendungen und Web Services werden in .NET mit Hilfe von ASP.NET umgesetzt, das den objektorientierten und verwalteten Nachfolger von klassischem ASP darstellt. Mit dem in Windows Vista enthaltenen Webserver IIS 7.0 erfährt ASP.NET zudem eine direkte Integration in den Webserver.

Zur Kommunikation mit anderen Anwendungen gibt es in .NET zahlreiche Möglichkeiten - von Remoting über Web Services bis hin zur Microsoft Message Queue. Mit .NET 3.0 wurde als weitere Komponente die Windows Communication Foundation - im folgenden als WCF abgekürzt - eingeführt, die alle bisherigen Konzepte kapselt und mit einer einzigen einheitlichen Schnittstelle versieht.

Zugriff auf Datenbanken und sonstige Ressourcen geschieht in .NET mit Hilfe von ADO.NET, das wiederum den Nachfolger von DAO und ADO darstellt. Mit der Version 3.0 der Sprache C# wurden zudem Funktionen zur Datenabfrage unter dem Namen Linq direkt in die Programmiersprache integriert.

Schließlich gibt es noch zwei Komponenten, die sich nicht in die genannten vier Kategorien eingliedern lassen, sondern eigenständig für sich stehen. Zum einen ist dies die Windows Workflow Foundation - im folgenden als WF abgekürzt - , mit der sich Workflows in .NET gestalten lassen, zum anderen Windows Card Space - im folgenden als WCS abgekürzt - , das zur Verwaltung digitaler Identitäten dient.

Was ist C#?

C#, das als "ßiescharp [ˌsiːˈʃɑɹp]" ausgesprochen wird, ist eine Programmiersprache für .NET, die von Microsoft in Zusammenarbeit mit dem Erfinder von Delphi, Anders Heijlsberg, speziell für diese Plattform entwickelt wurde und daher auch als Lingua Franca für .NET bezeichnet wird. Wie die CLI wurde auch C# von der ECMA standardisiert, wobei die Sprache den Namen ECMA-334 trägt.

Der Name von C# lehnt sich in seiner Schreibweise an den in der Musik um einen Halbton erhöhten Notenwert C namens Cis an, der ebenfalls als C# geschrieben wird, und bezeichnet daher eine höhere Variante der Programmiersprache C. Außerdem kann C# so wohl als symbolische Anspielung an die Sprache C++ wie auch als Wortspiel "see sharp" gesehen werden.

Ein Ziel bei der Entwicklung von C# war nicht nur, eine sich perfekt in .NET einfügende Sprache zu schaffen, sondern diese Sprache modern, durchgängig objekt- wie auch komponentenorientiert, und vor allem verständlich zu gestalten.

Unter Win32 waren Visual C++ und Visual Basic die gängigen Sprachen zur Entwicklung von Anwendungen für Windows, allerdings weisen beide gravierende Nachteile auf. Mit Visual C++ lassen sich zwar alle Möglichkeiten von Windows ausreizen, und es kann uneingeschränkt auf COM zugegriffen werden, insbesondere für Anfänger ist es allerdings auf Grund einiger ausgefallener Eigenheiten deutlich zu komplex.

Im Gegenzug dazu ermöglicht Visual Basic einen sehr einfachen Einstieg, bietet aber bei weitem nicht die Möglichkeiten von Visual C++, ist zudem bezogen auf COM nur eine Sprache zweiter Klasse und zeichnet sich vor allem durch die niedrige Ausführungsgeschwindigkeit der erzeugten Anwendungen aus.

Schließich sind Visual C++ und Visual Basic auch untereinander nicht ohne weiteres kompatibel, es gibt weder ein gemeinsames Typsystem noch ein einheitliches System zur Fehlerbehandlung, so dass Komponenten, die in der einen Sprache entwickelt wurden, nicht notwendigerweise in der anderen weiter genutzt werden können.

Dank dem Common Language Subset verfügen alle Sprachen unter .NET potenziell über die gleichen Fähigkeiten, das heißt, es gibt unter .NET keine Sprachen erster und zweiter Klasse, wie dies unter Win32 der Fall war. Die verschiedenen Sprachen für .NET unterscheiden sich daher zum einen syntaktisch - so hat C# mit Visual Basic .NET nicht viel gemein - , zum anderen legen sie ihre Schwerpunkte auf unterschiedliche Aspekte der Entwicklung und sprechen daher verschiedene Zielgruppen an.

Im Vergleich zu Visual Basic .NET ist C# die abstraktere, kompaktere und mathematisch elegantere Sprache, lässt einigen syntaktischen Zucker außen vor, und ermöglicht daher eher, sich auf die wesentlichen Aspekte der zu entwickelnden Anwendung - die Datenstrukturen und die Algorithmen - zu konzentrieren.