Zum Inhalt springen
C# Anfรคnger 20 min

Dein erstes C#-Programm

Ein modernes C#-Programm Zeile fuer Zeile: Top-Level Statements, Console-Ausgabe, String-Interpolation und die klassische Variante mit Main-Methode.

Aktualisiert:
Inhaltsverzeichnis

Dein erstes C#-Programm

Das โ€œHello, World!โ€ aus der Installation war kurz. Schauen wir uns genauer an, was dahinter steckt, und wie wir es erweitern.

Die moderne Form: Top-Level Statements

Eine Program.cs kann so einfach sein:

Console.WriteLine("Hallo, C#!");

Das ist ein komplettes C#-Programm. Der Compiler wickelt es im Hintergrund in eine Main-Methode - du musst dich darum nicht kuemmern.

Variablen nutzen

var name = "Anna";
var alter = 28;

Console.WriteLine($"Hallo, {name}! Du bist {alter} Jahre alt.");

Das $ vor dem String macht ihn zu einem interpolierten String - Platzhalter in {} werden durch den Wert des Ausdrucks ersetzt. Viel lesbarer als "Hallo, " + name + "!".

Nutzereingabe

Console.Write("Wie heisst du? ");
var name = Console.ReadLine();
Console.WriteLine($"Hallo, {name}!");
  • Console.Write - ohne Zeilenumbruch
  • Console.WriteLine - mit Zeilenumbruch
  • Console.ReadLine - liest eine Zeile vom Nutzer

Die klassische Form

Aeltere C#-Tutorials (und viele Firmenprojekte) nutzen noch den langen Stil. Den solltest du verstehen koennen:

using System;

namespace HalloCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hallo, C#!");
        }
    }
}
  • using System; - importiert den System-Namespace (fuer Console). Seit C# 10 gibt es global usings, damit das oft automatisch passiert.
  • namespace - logische Gruppierung (wie Packages in Java)
  • class Program - die Container-Klasse
  • static void Main(string[] args) - der klassische Einstiegspunkt

Beide Formen sind gueltig. Modernere Projekte nutzen Top-Level Statements.

Formate und Strings

C# hat drei Haupt-Stile fuer String-Ausgabe:

1. Interpolation (meistverwendet)

var name = "Anna";
var punkte = 95.5;
Console.WriteLine($"{name} hat {punkte:F1} Punkte.");

:F1 = Fliesskomma mit 1 Nachkommastelle โ†’ โ€œAnna hat 95.5 Punkte.โ€

2. Composite Formatting

Console.WriteLine("{0} hat {1:F1} Punkte.", name, punkte);

Funktional identisch zu Interpolation, aber weniger lesbar.

3. Konkatenation

Console.WriteLine(name + " hat " + punkte + " Punkte.");

Vermeiden, wenn moeglich - unuebersichtlich und ineffizient.

Mehr Formate

var pi = 3.14159;
var datum = DateTime.Now;
var prozent = 0.85;

Console.WriteLine($"{pi:F2}");         // 3.14
Console.WriteLine($"{pi:F0}");         // 3
Console.WriteLine($"{datum:yyyy-MM-dd}"); // 2026-04-24
Console.WriteLine($"{prozent:P0}");    // 85%
Console.WriteLine($"{1234567:N0}");    // 1,234,567 (mit Tausendertrennern)

Kleine Erweiterung

using System;

Console.Write("Wie heisst du? ");
var name = Console.ReadLine();

Console.Write("Wie alt bist du? ");
var input = Console.ReadLine();

if (int.TryParse(input, out var alter))
{
    if (alter >= 18)
        Console.WriteLine($"Hallo, {name}! Du bist volljaehrig.");
    else
        Console.WriteLine($"Hallo, {name}! Du bist noch {18 - alter} Jahre von 18 entfernt.");
}
else
{
    Console.WriteLine("Das war keine gueltige Zahl.");
}

int.TryParse

TryParse versucht zu konvertieren. Wenn es klappt, steht der Wert in alter und der Aufruf gibt true zurueck. Bei Misserfolg bekommst du false - ohne Exception.

Das out var ist C#-Kurzform: Die Variable alter wird inline deklariert.

Namespaces & using

Wenn du zusaetzliche Bibliotheken brauchst, importierst du sie mit using:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;

Seit C# 10 sind viele davon implizit - du siehst sie nicht im Code, aber sie sind aktiv. Das wird in der .csproj gesteuert:

<PropertyGroup>
  <ImplicitUsings>enable</ImplicitUsings>
  <Nullable>enable</Nullable>
</PropertyGroup>

Mit ImplicitUsings enable sparst du dir die Standard-using-Zeilen.

Exit-Codes

Ein Konsolenprogramm kann einen Exit-Code zurueckgeben:

if (args.Length == 0)
{
    Console.Error.WriteLine("Bitte einen Namen uebergeben.");
    return 1;
}

Console.WriteLine($"Hallo, {args[0]}!");
return 0;

In Top-Level-Statement-Programmen ist args automatisch verfuegbar.

Zusammenfassung

  • Top-Level Statements machen modernen C#-Code sehr kurz
  • Console.WriteLine, Console.ReadLine fuer Ein-/Ausgabe
  • $"..." fuer lesbare String-Interpolation
  • int.TryParse fuer sichere Konvertierung ohne Exceptions
  • using importiert Namespaces; global usings sparen Zeilen

Im naechsten Kapitel: Variablen und Datentypen im Detail.

Zurรผck zum C# Kurs