Files
wbs-csharp/Tag 1/Handout - CSharp Einfuehrung.md
T

315 lines
4.4 KiB
Markdown
Raw Normal View History

2026-08-10 15:23:12 +02:00
# Einführung in C#
## Ziel dieser Einheit
In dieser Einheit lernst du:
- wie ein C#-Programm aufgebaut ist
- was eine Klasse ist
- wie die Main-Methode funktioniert
- wie eine Konsolenausgabe erfolgt
- grundlegende Konzepte der Programmiersprache
---
## 1. Aufbau eines C#-Programms
Ein C#-Programm besteht aus:
- using-Anweisungen
- Namespace
- Klasse
- Main-Methode
---
## 2. using-Anweisungen
using System;
Erläuterung:
- entspricht dem Import in Java
- ermöglicht Zugriff auf vorhandene Klassen
Beispiel:
- Console
- Collections
---
## 3. Namespace
namespace _01_Einführung;
Erläuterung:
- organisiert Klassen
- vergleichbar mit Paketen in Java
- muss nicht zwingend der Ordnerstruktur entsprechen
---
## 4. Klasse
internal class Einführung
Erläuterung:
- jede Anwendung besteht aus Klassen
- Klassenname frei wählbar
- `internal` ist der Standard-Zugriffsmodifizierer
---
## 5. Die Main-Methode
private static void Main(string[] args)
Erläuterung:
- Einstiegspunkt des Programms
- wird beim Start zuerst ausgeführt
- jedes Programm besitzt genau eine Main-Methode
---
## 6. Konsolenausgabe
Console.WriteLine("Hello, World!");
Erläuterung:
- Ausgabe in der Konsole
- `Console` ist eine Klasse
- `WriteLine` ist eine Methode
---
### Farbausgabe
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("Ausgabe in Grün.");
Console.ResetColor();
---
## 7. Datentypen in C#
### Ganzzahlen
short s = 1;
Int16 i16 = 1;
int i = 1;
Int32 i32 = 1;
long l = 1;
Int64 i64 = 1;
Erläuterung:
- es gibt Kurz- und Langschreibweise
- `int` ist ein Alias für `Int32`
---
### Fließkommazahlen
float f = 1.1F;
double d = 1.1;
decimal m = 1.1M;
Erläuterung:
- `float` benötigt ein `F`
- `decimal` benötigt ein `M`
---
### Boolean
bool b = true;
Boolean boolean = true;
---
### Byte
byte b1 = 255;
Erläuterung:
- in C# ist `byte` unsigned
- Wertebereich: 0 255
---
### Unsigned und Signed Varianten
uint ui = 1;
sbyte sb = -128;
---
### Zeichen
char c1 = 'a';
---
## 8. String und Eingabe
string? eingabe = Console.ReadLine();
Erläuterung:
- `?` bedeutet nullable
- Wert kann `null` sein
---
### Null-Propagation
eingabe = eingabe?.Substring(2);
- Methode wird nur ausgeführt, wenn Wert nicht null ist
---
### String-Verarbeitung
string zeichenkette = String.Concat("Hallo", "Welt");
---
## 9. Eingabe und Konvertierung
eingabe = Console.ReadLine();
int eingabeInt;
---
### Convert mit Exception
try
{
eingabeInt = Convert.ToInt32(eingabe);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
---
### TryParse
bool parseOk = Int32.TryParse(eingabe, out eingabeInt);
Erläuterung:
- kein Exception-Handling nötig
- Ergebnis wird als bool zurückgegeben
---
## 10. Tastatureingaben
ConsoleKeyInfo consoleKeyInfo = Console.ReadKey(true);
Erläuterung:
- liest einzelne Tasteneingaben
---
## 11. Listen
IList<int> liste = new List<int>();
liste.Add(1);
liste.Add(42);
Erläuterung:
- `IList<>` → Interface
- `List<>` → Implementierung
---
### Iteration
foreach (int z in liste)
Console.WriteLine(z);
---
## 12. Arrays
### Eindimensionale Arrays
int[] intArray = { 0, 1, 2 };
---
### Mehrdimensionale Arrays
int[,] array2D =
{
{ 0, 1, 2 },
{ 3, 4, 5 }
};
---
### Jagged Arrays
int[][] jagged =
{
new int[] { 0, 1 },
new int[] { 2, 3, 4 }
};
---
## 13. Nullable
int? zahl = null;
Erläuterung:
- Wertetyp kann null sein
- zusätzlicher Zustand: „kein Wert“
---
bool? bNull = null;
- ermöglicht drei Zustände:
- true
- false
- null
---
## Zusammenfassung
- C#-Programme bestehen aus Klassen und einer Main-Methode
- using-Anweisungen ermöglichen den Zugriff auf Bibliotheken
- Datentypen haben Aliase (`int`, `Int32`)
- Nullable-Typen erlauben null-Werte
- Listen und Arrays dienen zur Datenverwaltung
- Eingaben und Konvertierungen sind zentrale Bestandteile
---
## Verständnisfragen
- Was ist der Einstiegspunkt eines C#-Programms?
- Was ist der Unterschied zwischen `int` und `Int32`?
- Warum benötigt `float` ein `F`?
- Was bedeutet `string?`?
- Was ist der Unterschied zwischen `Convert` und `TryParse`?