Advanced Services | Programmaufbau |
Ein C#-Programm besteht zunächst aus einer Datei mit einer Klasse, deren Name nach dem reservierten Wort class angegeben werden muß.
class Name_der_Klasse { }
Der Name der Klasse ist innerhalb gewisser Grenzen frei wählbar. Da C# wie C und C++ case-sensitiv ist, wird zwischen Groß- und Kleinschreibung unterschieden, also sind etwa
Name_der_Klasse und Name_der_KLASSE
zwei verschiedene Namen für Klassen. Unterstriche (underscore) sind zulässig, nicht jedoch Bindestriche und Sonderzeichen. Man kann ohne weiteres mehrere Klassen in einer Datei unterbringen. Eine gute Angewohnheit ist jedoch die Faustregel:
eine Klasse = eine Datei
Diese sogenannte Quellcodedatei oder Sourcecodedatei muß die Endung ".cs" aufweisen.
Im Gegensatz zu Java muß der Dateiname nicht identisch mit dem Namen der Klasse sein.
Da man C#-Entwicklungen meist mit der Entwicklungsumgebung VisualStudio durchführt, geschieht dies durch die
Projektverwaltung automatisch. Diese bettet die Klasse auch automatisch in einen Namensraum (namespace) ein.
Ein Namensraum ist ein Art Familienname für alle Klassen die er beherbergt.
Beginnen Sie den Namen einer Klasse immer mit einem großen Buchstaben, das ist eine von allen Profis
in der Praxis eingehaltene Konvention.
Die geschweiften Klammern { und } heißen
Blockklammern und treten wie alle Klammern immer paarweise auf und stehen in diesem Fall für Beginn
und Ende der Klasse. Die Frage, was eine Klasse genau ist, stellen wir zunächst mal hinten an, merken uns
aber schon, daß eine Klasse ein spezieller Datentyp ist. Datentypen werden im nächsten Kapitel beschrieben.
Zunächst reicht es zu wissen, daß eine Klasse mit dem reservierten Wort class beginnt,
einen Namen trägt und ein Paar geschweifter Klammern besitzt.
Innerhalb der Klasse befindet sich die Main-Methode. Auch hier braucht man sich am Anfang über deren Aufbau keine großen Gedanken machen und einfach akzeptieren, daß sich das Leben unserer ersten Programme innerhalb der Main-Methode abspielt. Es gibt zwei Ausprägungen der Main-Methode. Die einfache Form sieht wie folgt aus.
class Name_der_Klasse { public static void Main() { } // end Main } // end class Name_der_Klasse
Falls man einem Konsolpragramm Parameter mitgeben will die das Programm auswerten soll, braucht man die folgende Signatur.
class Name_der_Klasse { public static void Main(string[] args) { } // end Main } // end class Name_der_Klasse
oder auch
using System; class Name_der_Klasse { public static void Main(String[] args) { } // end Main } // end class Name_der_Klasse
Hier tauchen drei weitere reservierte Worte auf, nämlich public,
static, void, deren Bedeutung später im Zusammenhang mit Methoden und Klassen genau
erklärt werden wird. Main ist zwar kein reserviertes Wort, trotzdem ist seine
Bedeutung genau festgelegt und dürfen hier nicht verändert werden.
string wiederum ist die Abkürzung für System.String und nicht etwa nur für string.
Mit using System; machen wir dem Compiler eine Sammlung wichtiger Klassen bekannt, die wir ständig
brauchen.
Für args könnten wir auch einen anderen Namen verwenden, aber es gibt keinen
vernünftigen Grund dafür, also tun wir es auch nicht. Programmierer, die von C oder C++
herkommen, wundern sich vielleicht über die Stellung der eckigen Klammern. Für die Stellung der
eckigen Klammern gibt es in C# im gegensatz zu Java keine andere Variante.
Wir haben nun bereits ein ablauffähiges Programm, das aber weder Ein- noch Ausgabe hat und daher nicht
sonderlich attraktiv ist. Beachten Sie, daß hier bereits alle Formen von Klammern vorkommen, die C#
zu bieten hat, geschweifte, runde, und eckige. Die Bedeutung der beiden letzteren wird noch zu klären
sein. Wie immer treten alle Formen von Klammern paarweise auf.
Der zweimalige Vorwärts-slash leitet einen einzeiligen Kommentar ein. Demzufolge endet der Kommentar
mit dem Zeilenende. Es ist eine gute Angewohnheit, sich durch einen Kommentar klarzumachen, welche Funktion
die beiden schließenden geschweiften Klammern haben.
Wir nähern uns allmählich unserem ersten C#-Programm, dem Pendant zum berühmten
"Hello World" Programm in C. Wir brauchen noch einen Befehl, der eine Ausgabe auf die Konsole
ermöglicht. Diese Zeile ist im folgenden ergänzt.
using System; class UnserErstes { public static void Main(String args[]) { Console.WriteLine("Hello C#"); // Ausgabe von Hello C# auf die Konsole } // end Main } // end clas
In der ergänzten Zeile rufen wir ein Unterprogramm auf, daß die C#-Entwickler für uns
geschrieben haben und übergeben ihm die Zeichenkette "Hello C#". So eine
Zeichenkette nennen wir in Zukunft String. Das Unterprogramm sorgt dann für die Ausgabe dieser
Zeichenkette auf die Konsole. Das Unterprogramm hat den vollständigen Namen Console.WriteLine,
dabei ist WriteLine der Namen des Unterprogramms. Statt Unterprogramm sagen wir in
Zukunft Methode. Gelegentlich sprechen wir auch von Memberfunktion. Eigentlich ist dieser Name der
treffendere, aber mittlerweile hat sich der Name Methode für die objektorientierte Variante von
Unterprogrammen durchgesetzt. Nichtobjektorientierte Unterprogramme heißen Funktionen.
Einen ersten Einstieg in Klassen und Methoden und den Unterschied zwischen Funktionen und Methoden
findet man hier:
Erster Kontakt mit Klassen
Es gibt in C# zwei Arten von Kommentaren, einen einzeiligen Kommentar und einen mehrzeiligen Kommentar.
using System; class UnserErstes { public static void Main() { Console.WriteLine("Irgendein Text"); /* Die Anweisung Console.WriteLine("Irgendein Text") gibt die Zeichenfolge Irgendein Text auf die Konsole aus */ } // end Main } // end Main class
Dieser Kommentar kann nicht geschachtelt werden. Daher empfiehlt es sich, vorzugsweise den einzeiligen Kommentar zu verwenden, auch wenn man zwei oder drei Zeilen Kommentar hat, also lieber
// Kommentarzeile 1 // Kommentarzeile 2 // Kommentarzeile 3
statt
/* Kommentarzeile 1 Kommentarzeile 2 Kommentarzeile 3 */
Es ist ganz normal, daß man bei der Programmentwicklung ganze Programmblöcke auskommentieren muß, weil sie fehlerhaft oder noch nicht fertig kodiert sind. Hat man dann für die kurzen Kommentare den einzeiligen Kommentar verwendet, so kann man problemlos die größeren Passagen auskommentieren.
Es gibt zwei Weltanschauungen, was die Form eines Programms betrifft. Die einen schreiben
class UnserErstes { public static void Main(String args[]) { Console.WriteLine("Hello C-sharp"); /* Die öffnende geschweifte Klammer steht am Schluß, dadurch spart man eine Zeile, aber die zugehörigen Klammerpaare sind schwerer zuzuordnen */ } // end Main } // end Main class
und die anderen
class UnserErstes { public static void Main(String args[]) { Console.WriteLine("Hello C-sharp"); /* Die öffnende und schließende geschweifte Klammer stehen immer alleine in einer Zeile und in gleicher Einrücktiefe. So wird optisch sofort klar, welche Klammerpaare zusammengehören */ } // end Main } // end Main class
Hier wird offensichtlich die zweite Form bevorzugt; sie braucht zwar pro Klammerpaar eine Zeile mehr Platz, ist aber dafür deutlich übersichtlicher. Man erkennt sofort, welche geschweiften Klammern zusammengehören, wenn man sich an die folgenden Regeln hält.
Mit Console.WriteLine("Hello C-sharp") können wir den Text "Hello C-sharp" ausgeben, allerdings ohne die Anführungszeichen, da die Anführungszeichen einen Textstring begrenzen. Was ist, wenn wir die Anführungszeichen selbst ausgeben wollen? Dieses kleine Problem lösen die sogenannten ESCAPE-Sequenzen. Ein einleitender backslash "entwertet" das folgende Zeichen, so kann man etwa mit \" ein Anführungszeichen ausgeben. Hier eine kleine Liste von ESCAPE-Sequenzen, die man zur Ausgabe auf die Konsole immer mal wieder braucht.
Escape-Sequenz | Bedeutung |
---|---|
\b | backspace |
\n | newline |
\r | carriage return |
\t | Tabulator |
\' | Einfaches Anführungszeichen |
\" | Doppeltes Anführungszeichen |
\\ | backslash |
Es ist auch möglich C#-Programm mit einem schlichten ASCII-Editor zu schreiben und den C#-Compiler über die Konsole aufzurufen. Da man aber mit der ExpressEdition des Visualstudio eine kostenlose Entwicklungsumgebung zur Verfügung gestellt bekommt, die nur wenig Einschränkungen gegenüber der Vollversion aufweist entwickelt man in der Regel praktisch immer mit Visualstudio.
Einfache Ausgaben auf die Konsole
Ausgaben auf die Konsole mit Escape-Sequenzen