Freigeben über


Allgemeine Struktur eines C#-Programms

Tipp

Neu bei der Entwicklung von Software? Beginnen Sie zuerst mit den Lernprogrammen " Erste Schritte ". Sie führen Sie durch das Schreiben Ihrer ersten C#-Programme, bevor Sie mehr über die Programmstruktur erfahren.

Haben Sie Erfahrung in einer anderen Sprache? Vielleicht möchten Sie den Abschnitt " Erste Schritte " für C#-spezifische Syntax überspringen und dann hier zurückkehren.

Sie erstellen C#-Programme aus diesen Kernbausteinen: Namespaces organisieren Ihre Typen, Typen (Klassen, Strukturen, Schnittstellen, Enumerationen und Delegaten) definieren Verhalten und Daten, während Anweisungen und Ausdrücke zur Laufzeit Arbeit verrichten. Wie Sie den Eintrittspunkt strukturieren, hängt davon ab, welchen Anwendungsstil Sie wählen.

Auswählen des Anwendungsstils

Wenn Sie ein C#-Programm erstellen, treffen Sie zwei unabhängige Optionen zum Strukturieren:

  • Dateibasiert oder projektbasiert?
    • Eine dateibasierte App wird aus einer einzelnen .cs Datei ohne Projektdatei ausgeführt.
    • Eine projektbasierte App verwendet eine .csproj Datei und kann mehrere Quelldateien umfassen.
  • Anweisungen oder Main Methoden der obersten Ebene?
    • Mit Anweisungen auf oberster Ebene können Sie ausführbaren Code direkt am Anfang einer Datei schreiben.
    • Eine Main Methode umschließt den Einstiegspunkt in eine explizite statische Methode.

Sowohl projektbasierte Apps als auch dateibasierte Apps unterstützen den Einstiegspunktstil.

Dateibasierte Apps im Vergleich zu projektbasierten Apps

Ab C# 14 und .NET 10 können Sie mit dateibasierten Apps ein Programm ausführen, das in einer einzelnen *.cs Datei ohne Projektdatei enthalten ist. Speichern Sie den folgenden Code in einer Datei namens hello-world.cs , und führen Sie ihn mit dotnet run hello-world.cs oder dotnet hello-world.cs:

#!/usr/bin/env dotnet
Console.WriteLine("Hello, World!");

Hinweis

Mit #! der Zeile können Unix-Shells die Datei direkt ausführen. Legen Sie auf jedem Unix-System die Ausführungsberechtigung (+x) fest, und führen Sie die Datei über die Befehlszeile aus.

Dateibasierte Apps unterstützen alle C#-Syntax und können Präprozessordirektiven verwenden, um das Buildsystem zu konfigurieren. Verwenden Sie dateibasierte Apps für kleine Befehlszeilenprogramme, Prototypen und Experimente. Eine dateibasierte App besteht aus einer einzelnen Datei in einem Verzeichnis:

my-app/
└── hello-world.cs

Project-basierte Apps verwenden eine .csproj Datei sowie die .NET CLI-Befehledotnet newdotnet build und den dotnet run Workflow. Wählen Sie projektbasierte Apps aus, wenn Ihr Programm mehrere Dateien umfasst oder eine fein abgestimmte Buildkonfiguration benötigt. Eine projektbasierte App enthält eine Projektdatei zusammen mit einer oder mehreren Quelldateien:

my-app/
├── my-app.csproj
├── Program.cs
├── Models/
│   └── Person.cs
└── Services/
    └── GreetingService.cs

Wenn Ihre dateibasierte App wächst, können Sie sie ganz einfach in eine projektbasierte App konvertieren. Führen Sie diesen Befehl dotnet project convert aus, um eine Projektdatei aus ihrer vorhandenen Quelldatei zu generieren.

Wenn Sie wissen, dass Ihre App von Anfang an mehrere Quelldateien benötigt, beginnen Sie mit einer projektbasierten App. Sie vermeiden den Konvertierungsschritt und können Ihren Code sofort in separate Dateien organisieren.

Anweisungen auf höchstem Niveau gegenüber Main Methode

Mithilfe von Anweisungen auf oberster Ebene können Sie ausführbaren Code direkt in einer Datei schreiben, ohne ihn in eine Klasse und Main Methode umschließen zu müssen. Diese Stil ist die Standardeinstellung, wenn Sie eine neue Konsolen-App mit dotnet new console erstellen. Das folgende Beispiel zeigt ein modernes C#-Programm, das Anweisungen der obersten Ebene verwendet:

Console.WriteLine("Hello, World!");

namespace YourNamespace
{
    class YourClass
    {
    }

    struct YourStruct
    {
    }

    interface IYourInterface
    {
    }

    delegate int YourDelegate();

    enum YourEnum
    {
    }
}

Nur eine Datei in einem Projekt kann Anweisungen auf oberster Ebene aufweisen, und der Einstiegspunkt ist die erste Zeile des Programmtexts in dieser Datei. Wenn Sie größere Programme erstellen, fügen Sie weitere Programmelemente ein.

Sie können auch eine explizite statische Main Methode als Einstiegspunkt des Programms definieren:

// A skeleton of a C# program using an explicit Main method
namespace YourNamespace;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Hello, World!");
    }
}

Beide Einstiegspunkte funktionieren mit dateibasierten und projektbasierten Apps. Beide Stile unterstützen dieselben Features.

Erstellen und Ausführen von C#-Programmen

C# ist eine kompilierte Sprache. Verwenden Sie für projektbasierte Apps den dotnet build Befehl, um Quelldateien in ein Binärpaket zu kompilieren. Verwenden Sie dotnet run, um in einem Schritt zu erstellen und auszuführen. Die dotnet CLI, die im .NET SDK enthalten ist, bietet viele Tools zum Erstellen, Erstellen und Verwalten von C#-Projekten.

Kompiliert und führt für dateibasierte Apps dotnet run hello-world.cs die einzelne Datei direkt aus – keine Projektdatei erforderlich.

Ausdrücke und Anweisungen

Wenn Sie den Lernprogrammen " Erste Schritte " gefolgt sind, haben Sie bereits Ausdrücke und Anweisungen geschrieben. Jede eingegebene Codezeile war eine oder die andere (oder beides). Jetzt definieren wir diese Begriffe.

Ausdrücke und Anweisungen sind die grundlegenden Bausteine eines C#-Programms. Ein Ausdruck erzeugt einen Wert. Eine Anweisung führt eine Aktion aus und endet in der Regel in einem Semikolon.

Im Folgenden sind Ausdrücke aufgeführt:

  • 42 (Literalwert)
  • x + y (arithmetische Operation)
  • Math.Max(a, b) (Methodenaufruf, der einen Wert erzeugt)
  • condition ? trueValue : falseValue (Bedingter Ausdruck)
  • new Person("John") (Objekterstellung)

Eine Anweisung führt eine Aktion aus. Anweisungen steuern den Programmablauf, deklarieren Variablen oder rufen Vorgänge auf. Es folgen Aussagen:

  • int x; (Deklaration)
  • int x = 42; (Deklarationsanweisung mit Initialisierung)
  • Console.WriteLine("Hello"); (Methodenaufrufanweisung)
  • if (condition) { /* code */ } (bedingte Anweisung)
  • return result; (return-Anweisung)

Anweisungen enthalten häufig Ausdrücke, und Ausdrücke können in anderen Ausdrücken geschachtelt werden. Beispielsweise weist die folgende Deklarationsanweisung f dem Ergebnis eines Addition-Ausdrucks zu. Dieser Zusatzausdruck fügt die Ergebnisse von zwei Methodenaufrufausdrücken hinzu:

var maxResult = Math.Max(a, b) + Math.Max(c, d);

Ausführliche Informationen zu Aussagen finden Sie unter Aussagen. Informationen zu Ausdruckskörper-Mitgliedern finden Sie unter Ausdruckskörper-Mitglieder.