Quelldateikonventionen (C# und Java im Vergleich)
Aktualisiert: November 2007
Die Namenskonventionen für Dateien mit C#-Klassen unterscheiden sich geringfügig von den Namenskonventionen in Java. In Java führen alle Quelldateien die Dateinamenerweiterung .java. Jede Quelldatei enthält nur eine öffentliche Klassendeklaration der obersten Ebene, und der Klassenname muss mit dem Dateinamen übereinstimmen. Mit anderen Worten: Eine öffentlich deklarierte Klasse mit dem Namen Customer muss in einer Quelldatei mit dem Namen Customer.java definiert sein.
C#-Quellcode wird durch die Dateinamenerweiterung .cs gekennzeichnet. Anders als in Java können Quelldateien mehr als eine öffentliche Klassendeklaration der obersten Ebene enthalten. Außerdem muss der Dateiname nicht mit einem der Klassennamen übereinstimmen.
Deklarationen der obersten Ebene
Sowohl in Java als auch in C# beginnt der Quellcode mit einer festgelegten Sequenz aus Deklarationen der obersten Ebene. Es gibt nur einige wenige Unterschiede zwischen den Deklarationen in Java- und C#-Programmen.
Deklarationen der obersten Ebene in Java
In Java können Sie Klassen mit dem package-Schlüsselwort gruppieren. Eine verpackte Klasse muss das package-Schlüsselwort in der ersten ausführbaren Zeile der Quelldatei verwenden. Es folgen alle Importanweisungen, die für den Zugriff auf Klassen in anderen Paketen erforderlich sind, sowie die Klassendeklaration:
package Acme;
import java.io.*;
class Customer
{
...
}
Deklarationen der obersten Ebene in C#
C# verwendet das Konzept der Namespaces, um verwandte Klassen mit dem namespace-Schlüsselwort logisch zu gruppieren. Diese verhalten sich ähnlich wie Java-Pakete. Die gleiche Klasse kann in zwei verschiedenen Namespaces vorkommen. Für den Zugriff auf Klassen, die in einem Namespace außerhalb des aktuellen Namespaces definiert sind, müssen Sie die using-Direktive gefolgt vom Namespacenamen verwenden. Beispiel:
using System.IO;
namespace Acme
{
class Customer
{
// ...
}
}
Beachten Sie, dass using-Direktiven innerhalb von Namespace-Deklarationen stehen können. In solchen Fällen bilden die auf diese Weise importierten Namespaces einen Teil des Namespaces, der sie enthält.
Mit Java können Sie nicht mehrere Pakete in der gleichen Quelldatei verwenden. C# lässt dagegen mehrere Namespaces in einer einzelnen CS-Datei zu:
namespace AcmeAccounting
{
public class GetDetails
{
// ...
}
}
namespace AcmeFinance
{
public class ShowDetails
{
// ...
}
}
Vollqualifizierte Namen und Namespacealiase
Wie in Java können Sie sowohl auf Klassen in .NET Framework als auch auf Klassen in benutzerdefinierten Namespaces zugreifen, ohne dass Sie dazu einen using-Verweis auf den jeweiligen Namespace verwenden müssen. Geben Sie stattdessen den vollqualifizierten Namen der Klasse an, z. B. DataSet oder wie im vorherigen Beispiel AcmeAccounting.GetDetails.
Vollqualifizierte Namen können lang und umständlich sein. In diesem Fall können Sie mit dem using-Schlüsselwort ein Kurzwort oder ein Alias angeben, um Ihren Code übersichtlicher zu gestalten.
Im folgenden Code wird ein Alias erstellt, um auf den Code eines frei erfundenen Unternehmens zu verweisen:
using DataTier = Acme.SQLCode.Client;
class OutputSales
{
static void Main()
{
int sales = DataTier.GetSales("January");
System.Console.WriteLine("January's Sales: {0}", sales);
}
}
Beachten Sie, dass in der Syntax für WriteLine, mit {x} in der Formatierungszeichenfolge, das x die Position in der Argumentliste kennzeichnet, an der der Wert eingefügt werden soll. Wenn wir davon ausgehen, dass die GetSales-Methode 500 zurückgibt, dann wäre die Ausgabe der Anwendung wie folgt:
January's Sales: 500
Präprozessordirektiven
Wie in C und C++ gibt es auch in C# Präprozessordirektiven, die das bedingte Überspringen von Abschnitten in Quelldateien, das Erfassen von Fehler- und Warnbedingungen und das Abgrenzen bestimmter Regionen des Quellcodes ermöglichen. Der Begriff der "Präprozessordirektiven" wird nur aus Gründen der Einheitlichkeit mit den Programmiersprachen C und C++ verwendet. C# selbst enthält keine separaten Vorverarbeitungsschritte. Weitere Informationen finden Sie unter C#-Präprozessordirektiven.