315 lines
4.4 KiB
Markdown
315 lines
4.4 KiB
Markdown
|
|
# 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`?
|