Sprachelemente von C-Sharp
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 und plattformunabhängige 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
Quellcode
Zeichensatz
Unicode
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
Zugriffsmodifikatoren
Flags
Datentypen, Eigenschaften und Konstanten
C# kennt zwei Arten von Datentypen: Wertetypen (value types) und Referenztypen (reference types). Referenztypen dürfen dabei nicht mit Zeigern (pointer) gleichgesetzt werden, wie sie u. a. aus der Sprache C/C++ bekannt sind. Diese werden von C# zwar auch unterstützt, aber nur im unsicheren Modus (unsafe mode).
Wertetypen enthalten die Daten direkt, wobei Referenztypen im Gegensatz dazu nur Verweise auf die eigentlichen Daten, oder besser, Objekte darstellen. Bei Lesen und Schreiben von Wertetypen werden die Daten dagegen über einen Automatimus, Boxing genannt, in einer Instanz der jeweiligen Wrapper-Klasse gespeichert oder aus ihr geladen.
Die Zuweisung eines Wertes bzw. einer Referenz kann während der Deklaration erfolgen oder später, sofern die Variable nichts als Konstante deklariert wurde. Die Deklaration erfolgt durch Angabe eines Datentyps gefolgt von einem Variablennamen:
|
Es können auch mehrere Variablen des gleichen Typs zeitgleich deklariert werden:
|
Ferner besteht die Möglichkeit, der Variablen bei der Deklaration auch gleich einen Wert oder eine Referenz zuzuweisen (Initialwert):
|
Auch die Mehrfachzuweisung eines Wertes an verschiedene Variablen ist möglich:
|
Einen Sonderfall der Zuweisung stellt die Deklaration von Feldern (Arrays) dar. Näheres hierzu im entsprechenden Abschnitt.
Datentypen und Speicherbedarf
Datentypen sind in C# nicht elementar, sondern objektbasiert. Jeder der in der Tabelle aufgeführten Datentypen stellt einen Alias auf eine Klasse des Namespaces System dar. Beispielsweise wird der Datentyp
Vergleichbar mit C/C++, und anders als bei Java, gibt es unter C# vorzeichenbehaftete und vorzeichenlose Datentypen. Diese werden durch Voranstellen des Buchstaben s (signed) bei vorzeichenbehafteten Datentypen und durch Voranstellen des Buchstaben u (unsigned) bei vorzeichenlosen Datentypen symbolisiert ( |
|
Das Schlüsselwort const
Durch Verwendung des Schlüsselwortes const
wird einer Variablen ein konstanter Wert zugewiesen.
Einer mit const
deklarierten Variable kann nach der Deklaration und Wertzuweisung kein neuer
Wert bzw. keine neue Referenz zugewiesen werden. Die Variable wird als unveränderbare Konstante behandelt.
Eine Konstante kann dabei sowohl ein Wertetyp sein (also ein einfacher Datentyp), als auch ein Referenztyp,
der auf ein Objekt verweist. Das Schlüsselwort const
sichert dabei nur, dass die Referenz
nicht veränderbar ist, aber schützt nicht vor Änderungen am referenzierten Objekt. So kann beispielsweise einer
Konstanten die Referenz auf eine Liste zugewiesen werden, aber es sind weiterhin Änderungen an der Liste
selbst möglich (z. B. das Hinzufügen oder das Löschen von Listenelementen).
|
Das Schlüsselwort const
existiert auch in anderen Sprachen (z. B. C++) oder es existieren
vergleichbare Schlüsselworte (z. B. final
in der Programmiersprache Java).
Get- und Set-Operator (Eigenschaften)
Die Klasse string
Escape-Sequenzen
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 ).