Sprachelemente von C-Sharp
Hintergrund
C# ist eine objektorientierte Programmiersprache, die vom Softwarehersteller Microsoft im Rahmen seiner .NET-Initiative eingeführt wurde. Die Syntax von C# ist an die ebenfalls objektorientierte Programmiersprache Java angelehnt. Bei der Entwicklung von C# war Anders Hejlsberg maßgeblich beteiligt, der schon für den Softwarehersteller Borland die Programmiersprache Delphi entwickelte, die auf Pascal basiert.
Der Name der Sprache kommt aus der Musik. C# (gesprochen see sharp; engl. für genau erkennen) ist in der Musik die Bezeichnung für den durch ein Kreuz um einen Halbton erhöhten Ton c, das cis. Daher sprechen einige Entwickler anstatt von "C sharp" auch von "cis".
Konzept
Neben Konzepten der Programmiersprache Java, greift C# auch Konzepte aus C++ sowie der Microsoft-eigenen propietären Sprache VisualBasic auf. Beide Programmiersprachen sind ebenfalls, neben weiteren, als eigenständige Portierungen im .NET Framework verfügbar und nutzbar.
Als eine (favorisierte) Sprache der .NET Plattform, wird C# mittels einer virtuellen Laufzeitumgebung (runtime environment) in Form einer virtuellen Maschine (VM) ausgeführt. Durch die Verwendung dieser virtuellen Maschine ist es möglich, ein Programm unabhängig von der Plattform (Betriebssystem, Prozessorarchitektur) auszuführen. Ein Programm, das beispielsweise unter dem Betriebssystem Windows auf einer Intel-Architektur entwickelt wurde, kann somit auch auf einem MacOS X-System auf einer PowerPC (PPC)-Architektur ausgeführt werden. Diese Plattformunabhängigkeit ist bisher aber kaum gegeben, da der Hersteller Microsoft die .NET Plattform nur für seine eigene Produktlinie Windows anbietet. Eine Laufzeitumgebung für das Betriebssystem Linux (und Derivate) steht aber in Form des Mono-Projekts in Aussicht, das vom Hersteller Ximian begonnen wurde. Nur lizenzrechtliche Probleme könnten zum Scheitern dieser Portierung führen.
Was C# von Java und C++ abhebt, ist die Tatsache, dass sowohl Klassen als auch Datentypen, wie in Smalltalk, durch Objekte repräsentiert werden. Ein weiterer Unterschied ist, dass in C# mit Attributen gearbeitet werden kann. Attribute erlauben es, einem Objekt Funktionalität hinzuzufügen, ohne seine Schnittstelle zu verändern. Man spricht hierbei auch von Metadaten.
Einige der Elemente von C++, die im allgemeinen als unsicher gelten, wie beispielsweise Zeiger-Arithmetik, wurden in C# nur für so genannten "unsafe code" (unmanaged code) erlaubt. Dieser benötigt eine veränderte Sicherheitseinstellung, um auf einem Zielsystem ausgeführt zu werden, und einen zusätzlichen Compiler-Schalter, um ihn zu übersetzen. Somit wird vermieden, dass sich versehentlich unsicherer Code in eine Anwendung einschleicht.
Sprachelemente
Zu Beginn der Klassiker aller Programme in C#:
|
Notationsregeln
Schlüsselworte
if, else (Bedingte Ausführung)
for, while, do (Schleifen)
continue, break, goto
return, throw (Sprünge)
switch, case (Aufzählung)
Klassen und Objekte
Die Klasse Object
Konstruktor
Destruktor
Das Schlüsselwort static
Das Schlüsselwort new
Das Schlüsselwort this
Strukturen
Flags
Datentypen, Eigenschaften und Konstanten
Datentypen und Speicherbedarf
Datentyp | Bit | Vorz. |
---|---|---|
bool | 1 | - |
byte | 8 | J |
char | 16 | - |
decimal | 128 | - |
double | 64 | - |
float | 32 | - |
int | 32 | J |
long | 64 | J |
sbyte | 8 | J |
short | 16 | J |
uint | 32 | N |
ulong | 64 | N |
ushort | 16 | N |
Datentypen sind in C# nicht elementar, sondern sind auch objektbasiert. Jeder der oben aufgeführten Datentypen stellt einen Alias auf eine Klasse des Namespaces System dar. Beispielsweise wird dabei der Datentyp bool durch die Klasse System.Boolean abgebildet. Man spricht auch von Wrapper-Klasse. Zu beachten ist auch, dass es für verschiedene Rechnerarchitekturen auch unterschiedliche Wertigkeiten beim Speicherbedarf gibt. Für den Datentyp int gibt es unter anderem die Wrapper-Klassen int16, int32 und int64 im genannten Namespace. Vergleichbar mit C/C++ und anders als bei Java gibt es unter C# außerdem vorzeichenbehaftete und vorzeichenlose Datentypen. Diese werden durch voranstellen des Buchstaben s (für signed) bei vorzeichenbehafteten Datentypen und durch voranstellen des Buchstaben u (für unsigned) bei vorzeichenlosen Datentypen symbolisiert. Die Fließ- bzw- Gleitkomma-Datentypen (float, double, decimal) können neben einfacher auch doppelte Genauigkeit aufweisen und dadurch einen varierenden Speicherbedarf aufweisen. Dadurch ändert sich die Genauigkeit, was durch die Anzahl der Nachkommastellen zum Ausdruck kommt.
Das Schlüsselwort const
Get- und Set-Operator (Eigenschaften)
Die Klasse string
Methoden
Parameter
Die Schlüsselworte in, out, ref
Parameterlisten
Rückgabewert
Indexer und Arrays (Felder)
Ereignisse und Delegate
Operatoren
Sichtbarkeit
Namensräume (Namespaces)
Vererbung
Abstrakte Klassen
Interfaces
Das Schlüsselwort override
Das Schlüsselwort base
Das Schlüsselwort sealed
Casting (Konvertierung)
Überladen vs Überschreiben
Mehrfachvererbung
Exception-Handling (Ausnahmen)
Assemblies
Attribute (Metadaten)
Shared Libraries (DLLs)
Kommentare und Dokumentation
[TODO: Freiwillige vor]
Verfügbare Klassenbibliotheken
- Collection
- Threads
- Reflection
- CodeDOM
- ADO.NET
- ASP.NET
- Windows.Forms
- ...
Verfügbarkeit (IDEs)
Neben der von Microsoft favorisierten Entwicklungsplattform VisualStudio.NET aus dem eigenen Hause, gibt es inzwischen auch Entwicklungsumgebungen (IDEs) anderer Hersteller für C#:
- C#-Builder von Borland
- Open Source-IDE SharpDevelop ( http://www.icsharpcode.net/OpenSource/SD/Default.aspx ).