Syntax ·
Datentypen ·
Kontrollstrukturen ·
OOP ·
Collections ·
LINQ
C# ist eine moderne, objektorientierte Sprache für die .NET-Plattform. Diese Grundlagen sind essenziell für die Entwicklung von Anwendungen, Spielen und Webdiensten.
C#-Programme bestehen aus Namespaces, Klassen und Methoden. Die Main()-Methode ist der Einstiegspunkt. Jede Anweisung endet mit einem Semikolon (;).
| Element | Beschreibung |
|---|---|
| using | Importiert Namespaces (z.B. System, System.IO) |
| namespace | Organisiert Code in logischen Gruppen |
| class | Definiert einen neuen Typ (Blaupause für Objekte) |
| static void Main() | Einstiegspunkt der Anwendung |
| Console.WriteLine() | Ausgabe auf die Konsole |
| Console.ReadLine() | Eingabe von der Konsole |
| // Kommentar | Einzeiliger Kommentar |
| /* */ | Mehrzeiliger Kommentar |
| /// | XML-Dokumentationskommentar |
$"Text {variable}" für lesbare String-Formatierung – das ist moderner als string.Format().
Datentypen definieren die Art der Daten, die eine Variable speichern kann. C# unterscheidet zwischen Wertetypen (Stack) und Referenztypen (Heap).
| Typ | Kategorie | Größe | Bereich | Beispiel |
|---|---|---|---|---|
| int | Wertetyp | 4 Byte | -2.147.483.648 bis 2.147.483.647 | 42 |
| long | Wertetyp | 8 Byte | -9.223.372.036.854.775.808 bis ... | 42L |
| float | Wertetyp | 4 Byte | ±3.4e−38 bis ±3.4e+38 | 3.14f |
| double | Wertetyp | 8 Byte | ±5.0e−324 bis ±1.7e+308 | 3.14159 |
| decimal | Wertetyp | 16 Byte | ±1.0e−28 bis ±7.9e+28 (28 Stellen) | 99.99m |
| char | Wertetyp | 2 Byte | Unicode-Zeichen | 'A' |
| bool | Wertetyp | 1 Byte | true / false | true |
| string | Referenztyp | variabel | Text | "Hallo" |
| object | Referenztyp | variabel | Beliebiger Typ | new object() |
decimal für Geldbeträge und präzise Berechnungen. Verwenden Sie double für wissenschaftliche Berechnungen. var ist nützlich, wenn der Typ offensichtlich ist.
Kontrollstrukturen steuern den Programmablauf – Bedingungen, Schleifen und Fallunterscheidungen. C# bietet sowohl klassische als auch moderne Konstrukte.
| Struktur | Beschreibung | Beispiel |
|---|---|---|
| if / else | Bedingte Ausführung | if (x > 0) { ... } |
| switch | Fallunterscheidung | switch (x) { case 1: ... } |
| for | Zählergesteuerte Schleife | for (int i = 0; i < 10; i++) { ... } |
| foreach | Iteration über Collections | foreach (var item in list) { ... } |
| while | Kopfgesteuerte Schleife | while (x < 10) { ... } |
| do-while | Fußgesteuerte Schleife | do { ... } while (x < 10); |
| break | Schleife beenden | break; |
| continue | Schleifendurchlauf überspringen | continue; |
| return | Methode beenden | return value; |
foreach für Iterationen über Collections – es ist sicherer und lesbarer als for, wenn Sie nur lesend zugreifen.
Objektorientierte Programmierung in C# verwendet Klassen, Vererbung, Polymorphie und Kapselung. C# unterstützt moderne OOP-Konzepte wie Properties, Auto-Properties und Records.
Collections sind Datenstrukturen für die Speicherung und Verwaltung von Elementgruppen. Die generischen Collections im System.Collections.Generic-Namespace sind typsicher und leistungsfähig.
| Collection | Beschreibung | Beispiel |
|---|---|---|
| List<T> | Dynamisches Array (indizierter Zugriff) | new List<string>() |
| Dictionary<TKey, TValue> | Schlüssel-Wert-Paare (schneller Zugriff) | new Dictionary<string, int>() |
| T[] | Festes Array | int[] zahlen = new int[10] |
| HashSet<T> | Eindeutige Elemente (ungeordnet) | new HashSet<string>() |
| Queue<T> | FIFO (First In, First Out) | new Queue<string>() |
| Stack<T> | LIFO (Last In, First Out) | new Stack<string>() |
| IEnumerable<T> | Interface für Iteration (LINQ) | IEnumerable<int> sequence = ... |
List<T> für dynamische Sequenzen, Dictionary<TKey, TValue> für schnelle Schlüsselsuchen und HashSet<T> für eindeutige Werte.
LINQ (Language Integrated Query) ermöglicht deklarative Abfragen auf Collections, Datenbanken und XML. Es gibt zwei Syntaxvarianten: Query-Syntax und Method-Syntax.
| Operation | Beschreibung | Beispiel |
|---|---|---|
| Where | Filtert Elemente nach Bedingung | .Where(x => x > 0) |
| Select | Projiziert Elemente (Transformiert) | .Select(x => x * 2) |
| OrderBy / OrderByDescending | Sortiert Elemente | .OrderBy(x => x.Name) |
| GroupBy | Gruppiert Elemente nach Schlüssel | .GroupBy(x => x.Kategorie) |
| First / FirstOrDefault | Erstes Element (oder Default) | .FirstOrDefault(x => x.Id == 1) |
| Any | Prüft, ob Elemente existieren | .Any(x => x > 0) |
| Count | Zählt Elemente | .Count(x => x > 0) |
| Sum / Average | Summe / Durchschnitt | .Sum(x => x.Preis) |
Main()
int
if
class
List
LINQ
Console.WriteLine("Hallo"); ·
var list = new List<string>(); ·
var result = from x in data where x > 0 select x;