1. Allgemeine Struktur eines C#-Projekts
Dein Programm ist nicht einfach nur eine Datei, sondern eine ganze Sammlung von Dateien, Ordnern und Einstellungen. C# ist eine streng typisierte Sprache, und bei größeren Anwendungen ist es wichtig, alles ordentlich zu halten. Wenn du die Projektstruktur ignorierst, wird dein Code schnell zu einem elektronischen Labyrinth, in dem du nicht mal mehr deine eigene "Hello, World!"-Ausgabe findest.
Außerdem ist das Verständnis der Projektstruktur eine Fähigkeit, die bei Bewerbungsgesprächen geschätzt wird. Das ist wie zu wissen, wo im Haus die Schlüssel und die Fernbedienung liegen – das Leben wird viel einfacher!
Stell dir zur Veranschaulichung vor, unser C#-Projekt ist eine Box mit Fächern:
MyFirstConsoleApp/
├── MyFirstConsoleApp.csproj
├── Program.cs
├── Properties/
│ └── launchSettings.json
├── bin/
│ └── ... (hier landet das kompilierte Programm)
├── obj/
│ └── ... (hier werden die Zwischenkompilierungsdateien abgelegt)
Details zur Struktur:
| Name | Wofür ist das? |
|---|---|
|
Projektdatei: der „Pass“ deines Programms, hier stehen alle Projekteinstellungen drin. |
|
Die Hauptdatei mit dem Einstiegspunkt (Main). Hier schreibst du normalerweise deinen ersten Code. |
|
Ordner mit Projekteinstellungen, z.B. wie das Projekt aus der IDE gestartet wird. |
|
„Korb für fertige Produkte“ – hier landet die gebaute (kompilierte) ausführbare Datei. |
|
Interne Arbeitsdateien der Kompilierung (wie Entwürfe beim Romanschreiben, du schaust da selten rein). |
2. Die Projektdatei (.csproj)
Die Datei mit der Endung .csproj ist das Herz und Hirn des Projekts. Hier stehen alle globalen Einstellungen: Sprachversion, Abhängigkeiten, welche Dateien kompiliert werden, welche Pakete eingebunden sind usw. Wechsel im Solution Explorer auf den Tab Files.
Beispiel für eine Datei eines Konsolenprojekts:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
</Project>
- <TargetFramework>net9.0</TargetFramework> – sagt, dass das Projekt für .NET 9 gedacht ist.
- <OutputType>Exe</OutputType> – bedeutet, dass eine ausführbare Datei (.exe für Windows) entsteht.
- Im Block <PropertyGroup> stehen die wichtigsten Parameter.
- In dieser Datei kannst du zusätzliche NuGet-Pakete hinzufügen, Kompilierungseinstellungen ändern, Features ein- oder ausschalten.
3. Die Hauptdatei des Programms: Program.cs
Wenn man das Projekt mit einem Theater vergleicht, ist Program.cs die Bühne und alle anderen Dateien sind das Backstage. Hier befindet sich der sogenannte „Einstiegspunkt“ der Anwendung – die Methode Main.
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hallo, Welt!");
}
}
}
- namespace – Namensraum, hilft Klassen zu gruppieren und Namenskonflikte zu vermeiden.
- class Program – die Hauptklasse, in der sich die Methode Main befindet.
- static void Main(string[] args) – der notwendige Einstiegspunkt – hier startet das Programm.
- Console.WriteLine() – die dir schon bekannte Möglichkeit, der Welt etwas mitzuteilen.
Wir aktualisieren unsere Anwendung
Erinnern wir uns: In den letzten Vorlesungen haben wir schon eine Mini-Anwendung gebaut, die den Namen des Users abfragt und ihn begrüßt. Hier ein Beispiel:
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
Console.Write("Bitte gib deinen Namen ein: ");
string name = Console.ReadLine();
Console.WriteLine($"Willkommen, {name}! Lebe lang und in Frieden.");
}
}
}
Starte das Projekt: Klick auf den grünen Button ▶️ Run.
Wenn alles geklappt hat, erscheint unten der Tab Run. Du siehst, dass das Programm läuft und auf deine Antwort auf die Frage Bitte gib deinen Namen ein: wartet. Tippe irgendeinen Namen (zum Beispiel "Katze") direkt in diese Konsole und drücke Enter.
Direkt nach dem Drücken von Enter verarbeitet das Programm deine Eingabe und gibt die finale Nachricht mit deinem Namen aus. Das Programm ist beendet und wir sehen das Ergebnis.
4. Wie du deinen Code schreibst: Grundregeln
Wo schreibt man Code?
Die Hauptlogik schreibst du am Anfang am besten in die Datei Program.cs in die Methode Main. Wenn die Anwendung wächst, erstellst du neue Dateien und Klassen, aber fürs Erste – alles Wichtige passiert genau hier.
Was darf (und was darf nicht) in Main stehen?
- Erlaubt: Variablen deklarieren, Berechnungen schreiben, Methoden aufrufen, Daten ausgeben/einlesen.
- Nicht erlaubt: Code „außerhalb“ von Methoden oder Klassen schreiben (z.B. einfach Console.WriteLine("Hallo"); außerhalb von Main – das geht nicht!).
Kommentare
Kommentiere deinen Code für dich und andere. Für einzeilige Kommentare nutze //, für mehrzeilige – /* ... */. Je einfacher du (oder jemand anderes) später verstehst, warum du diesen mysteriösen Code geschrieben hast, desto besser.
// Das ist ein einzeiliger Kommentar
/*
Das hier ist
ein mehrzeiliger Kommentar.
*/
5. Wie läuft das Programm ab?
Dein Programm startet immer mit der Methode Main. Alles, was davor steht, wird ignoriert. Willst du beim Start etwas machen? Pack es in Main.
Beispiel – vereinfachtes Flussdiagramm (Code → Start):
Programmstart
|
v
Methode Main
|
v
Ausführung der Anweisungen in Main (der Reihe nach)
|
v
Programmende
6. Wie wächst deine Anwendung: Neue Dateien hinzufügen
Wann solltest du eine neue Datei anlegen?
Wenn dein Code nicht mehr auf einen Bildschirm passt und du die Variablen nicht mehr im Kopf hast, ist es Zeit, den Code aufzuteilen.
Beispiel: Wenn du einen Taschenrechner baust, kannst du eine eigene Datei Calculator.cs anlegen und dort eine eigene Klasse unterbringen.
MyFirstConsoleApp/
├── Program.cs
├── Calculator.cs // Neue Datei mit der Logik des Taschenrechners
Wie füge ich in Rider eine neue Datei hinzu?
- Im Solution Explorer-Baum rechtsklick auf das Projekt → "Add" → "New File" (oder "New Class").
- Gib der Datei einen sinnvollen Namen.
- Schreib in die Datei eine neue Klasse oder Funktion.
// Calculator.cs
namespace MyFirstConsoleApp
{
class Calculator
{
public static int Add(int a, int b)
{
return a + b;
}
}
}
Und jetzt nutzen wir sie aus Program.cs:
// Program.cs
using System;
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
int summe = Calculator.Add(2, 3); //Wir nutzen die Add-Funktion aus der Klasse Calculator
Console.WriteLine($"2 + 3 = {summe}");
}
}
}
7. "Build" und "Run" – was passiert unter der Haube?
Wenn du auf Run (oder F5) klickst, macht die IDE folgendes:
- Sie prüft den Syntax und baut deinen Code zu einer Binärdatei (.exe oder .dll) im Ordner bin/Debug/net9.0/ oder bin/Release/net9.0/.
- Sie startet die gebaute Datei.
- Sie gibt das Ergebnis im Terminal/Konsole aus, das du siehst.
bin/ und obj/: Wofür sind diese Ordner?
- bin/ – hier liegt dein fertiges Produkt (gebaute Programme).
- obj/ – hier werden temporäre Dateien gespeichert, die der Compiler für Zwischenschritte braucht.
Normalerweise kannst du diese Ordner getrost ignorieren, ihr Inhalt wird bei Bedarf automatisch neu erstellt.
8. Häufige Fehler beim Coden und Arbeiten mit dem Projekt
Code schreiben heißt nicht einfach blind auf die Tasten hauen. Sobald Fehler wie CS5001: Program does not contain a static 'Main' method suitable for an entry point auftauchen, googeln alle wie wild und die IDE meckert noch komplizierter.
- Einer der häufigsten Fehler: Code außerhalb einer Methode oder Klasse. In C# kannst du nicht einfach ein Statement direkt in die Datei schreiben. Alles muss in einer Klasse und Methode stehen!
- Unterschiedliche Namen für Dateien und Klassen. Das geht zwar, aber besser ist es, Dateien und Klassen gleich und verständlich zu benennen – für dich (und deinen zukünftigen Kollegen).
- Verwirrung bei Namensräumen. Wenn du eine Klasse in einem anderen namespace anlegst, vergiss nicht, sie mit using einzubinden.
- Den Einstiegspunkt vergessen. Wenn du die Methode Main löschst oder umbenennst, startet das Programm nicht.
GO TO FULL VERSION