Kurz: void Gruss(string name) { Console.WriteLine($“Hallo {name}!”); }
Teil des Kurses C#
int Addiere(int a, int b) => a + b; // Ausdruckskörper
void Gruss(string name) { Console.WriteLine($"Hallo {name}!"); }
double Potenz(double basis, int exponent = 2) // Standardwert
{
double r = 1;
for (int i = 0; i < exponent; i++) r *= basis;
return r;
}
Console.WriteLine(Addiere(3, 4));
Gruss("Mia");
Console.WriteLine($"{Potenz(3)} {Potenz(2, 10)} {Potenz(exponent: 3, basis: 2)}"); // benannte ArgumenteAusgabe:
7
Hallo Mia!
9 1024 8Methoden ohne Klasse (lokale Funktionen) sind in Top-Level-Programmen erlaubt. In anderen Dateien stehen sie in Klassen.
Parameterarten
| Schlüsselwort | Wirkung |
|---|---|
| (keines) | Wert wird kopiert |
ref | Referenz auf die Variable des Aufrufers (muss initialisiert sein) |
out | Ausgabeparameter (wird in der Methode gesetzt) |
in | Referenz, nur lesend (große Strukturen) |
params | beliebig viele Argumente als Array |
void Tausche(ref int a, ref int b) => (a, b) = (b, a);
bool TryTeile(int a, int b, out int ergebnis)
{
if (b == 0) { ergebnis = 0; return false; }
ergebnis = a / b;
return true;
}
int Summe(params int[] zahlen) => zahlen.Sum();
int x = 1, y = 2;
Tausche(ref x, ref y);
Console.WriteLine($"{x} {y}");
if (TryTeile(10, 3, out int q)) Console.WriteLine(q);
Console.WriteLine(TryTeile(1, 0, out _)); // _ = Wert ignorieren
Console.WriteLine($"{Summe()} {Summe(1, 2, 3)}");Ausgabe:
2 1
3
False
0 6Mehrere Rückgabewerte: Tupel
(int min, int max) MinMax(int[] z) => (z.Min(), z.Max());
(string Name, int Alter) Person() => ("Mia", 17);
var (kleinste, groesste) = MinMax(new[] { 5, 3, 9, 1 });
Console.WriteLine($"{kleinste} {groesste}");
var p = Person();
Console.WriteLine($"{p.Name} {p.Alter}");
(int a, int b) = (1, 2);
(a, b) = (b, a);
Console.WriteLine($"{a} {b}");Ausgabe:
1 9
Mia 17
2 1Überladen
Lokale Funktionen in Top-Level-Programmen lassen sich nicht überladen. In Klassen geht es:
Console.WriteLine($"{Anzeige.Beschreibe(5)}, {Anzeige.Beschreibe(2.5)}, {Anzeige.Beschreibe("hi")}, {Anzeige.Beschreibe(1, 2)}");
static class Anzeige
{
public static string Beschreibe(int x) => $"int {x}";
public static string Beschreibe(double x) => $"double {x}";
public static string Beschreibe(string x) => $"string {x}";
public static string Beschreibe(int a, int b) => $"zwei ints {a + b}";
}Ausgabe:
int 5, double 2.5, string hi, zwei ints 3Rekursion und lokale Funktionen
long Fakultaet(int n) => n <= 1 ? 1 : n * Fakultaet(n - 1);
int Ggt(int a, int b) => b == 0 ? a : Ggt(b, a % b);
int Fibonacci(int n)
{
return Fib(n);
static int Fib(int k) => k < 2 ? k : Fib(k - 1) + Fib(k - 2); // lokale Funktion
}
Console.WriteLine($"{Fakultaet(10)} {Fakultaet(20)} {Ggt(48, 18)} {Fibonacci(15)}");Ausgabe:
3628800 2432902008176640000 6 610Optionale Parameter, Namen und Dokumentation
XML-Kommentare (///) dokumentieren Methoden, die IDE zeigt sie beim Aufruf:
/// <summary>Berechnet den Bruttopreis.</summary>
/// <param name="netto">Nettopreis in Euro</param>
/// <param name="mwst">Steuersatz als Anteil, z. B. 0.19</param>
/// <returns>Der Bruttopreis.</returns>
decimal Brutto(decimal netto, decimal mwst = 0.19m)
{
if (netto < 0) throw new ArgumentOutOfRangeException(nameof(netto), "darf nicht negativ sein");
return Math.Round(netto * (1 + mwst), 2);
}
Console.WriteLine($"{Brutto(100)} {Brutto(50m, 0.07m)}");Ausgabe:
119.00 53.50Merke
- Ausdruckskörper
=> ausdruckfür kurze Methoden; Standardwerte und benannte Argumente ref,out,in,paramsändern die Übergabe;TryXyz(..., out var ergebnis)ist ein bekanntes Muster- Tupel liefern mehrere Werte:
(int min, int max); Dekonstruktion mitvar (a, b) = ... - Überladen: gleicher Name, andere Parameter
- XML-Kommentare dokumentieren für die IDE
Übungsaufgabe
Schreibe eine Methode (double Mittel, double Abweichung) Statistik(double[] werte).
Quiz zur Selbstkontrolle
Wofür steht out bei Parametern?
- Die Methode setzt den Wert, der Aufrufer bekommt ihn (richtig)
- Ausgabe auf der Konsole
- Der Parameter wird gelöscht
- Der Parameter ist optional
Wie gibst du mehrere Werte zurück?
- Mit einem Tupel, z. B. (int, int) (richtig)
- Mit mehreren return
- Gar nicht
- Nur mit globalen Variablen
Was bewirkt params?
- Beliebig viele Argumente werden zu einem Array (richtig)
- Der Parameter wird kopiert
- Der Parameter wird verboten
- Der Parameter ist ein Zeiger
Weiter im Kurs
Zurück: Strings und Text
Weiter: Arrays und Collections
Alle Kapitel: C# im Überblick