0Pricing
C# Academy · Lektion

Generische Methoden

Typparameter für Methoden.

Generische Methoden ist eine kostenlose C# Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C# Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was sind generische Methoden?

Eine generische Methode deklariert einen oder mehrere eigene Typparameter, die nach dem Methodennamen in spitzen Klammern geschrieben werden. Derselbe Methodenrumpf funktioniert dadurch für viele Typen, ohne Umwandlungen oder doppelte Implementierungen.

Typparameter sind Platzhalter wie T. Der Compiler ersetzt sie an der Aufrufstelle durch den tatsächlichen Typ, sodass die Typüberprüfung vollständig erhalten bleibt.

void Print<T>(T value)
{
    Console.WriteLine(value);
}

Einen Typparameter deklarieren

Die Typparameterliste <T> steht zwischen dem Methodennamen und der Parameterliste. Sie können T im Methodenrumpf als Parametertyp, Rückgabetyp oder Typ einer lokalen Variablen verwenden.

Konventionell werden einzelne Typparameter T genannt; beschreibende Namen wie TKey sind ebenfalls üblich.

T Echo<T>(T input)
{
    return input;
}

Aufruf mit Typinferenz

Üblicherweise geben Sie das Typargument nicht ausdrücklich an. Der Compiler leitet T aus den übergebenen Argumenten ab.

Hier ergibt Echo(42) die Ableitung T = int, während Echo("hi") T = string ergibt. Die Typinferenz hält Aufrufe generischer Methoden übersichtlich und gut lesbar.

using System;

class Program
{
    static T Echo<T>(T input) => input;

    static void Main()
    {
        Console.WriteLine(Echo(42));
        Console.WriteLine(Echo("hi"));
    }
}

Explizite Typargumente

Wenn die Typinferenz den Typ nicht bestimmen kann oder Sie ihn ausdrücklich angeben möchten, übergeben Sie das Typargument in spitzen Klammern an der Aufrufstelle.

Das ist erforderlich, wenn kein Argument den Typ enthält, zum Beispiel bei einer Methode, deren T nur im Rückgabetyp vorkommt.

T Create<T>() where T : new() => new T();

// call:
var list = Create<int>();

Mehrere Typparameter

Eine generische Methode kann mehrere durch Kommas getrennte Typparameter deklarieren. Jeder Parameter wird unabhängig abgeleitet oder angegeben.

Ein klassisches Beispiel ist das Vertauschen zweier Werte oder das Erstellen eines Paars aus zwei unterschiedlichen Typen.

(TSecond, TFirst) Flip<TFirst, TSecond>(TFirst a, TSecond b)
{
    return (b, a);
}

Ein generisches Vertauschen

Generische Methoden eignen sich besonders für Hilfsfunktionen, die den konkreten Typ nicht berücksichtigen. Eine Tauschfunktion vertauscht zwei Werte beliebigen passenden Typs.

Mit dem Schlüsselwort ref kann die Methode die Variablen des Aufrufers direkt ändern.

using System;

class Program
{
    static void Swap<T>(ref T a, ref T b)
    {
        T temp = a;
        a = b;
        b = temp;
    }

    static void Main()
    {
        int x = 1, y = 2;
        Swap(ref x, ref y);
        Console.WriteLine($"{x} {y}");
    }
}

Constraints für Methodenparameter

Eine generische Methode kann ihre Typparameter mit einer where-Klausel einschränken. Constraints teilen dem Compiler mit, welche Operationen für T zulässig sind.

Unten erlaubt where T : IComparable<T> dem Methodenrumpf, CompareTo sicher aufzurufen.

T Max<T>(T a, T b) where T : IComparable<T>
{
    return a.CompareTo(b) >= 0 ? a : b;
}

Generische Methoden in nicht generischen Klassen

Eine Klasse muss nicht generisch sein, um generische Methoden zu enthalten. Statische Hilfsklassen enthalten häufig solche Methoden.

So bleiben allgemeine Hilfsfunktionen zusammengefasst, ohne dass die gesamte Klasse einen Typparameter führen muss.

static class Util
{
    public static T First<T>(T[] items) => items[0];
}

Ableitung aus Arrays

Die Typinferenz funktioniert auch bei Array- und Sammlungargumenten. Durch die Übergabe eines int[] wird T = int automatisch abgeleitet.

Dadurch wirken generische Algorithmen wie integrierte Sprachfunktionen.

using System;

class Program
{
    static T First<T>(T[] items) => items[0];

    static void Main()
    {
        int[] nums = { 10, 20, 30 };
        Console.WriteLine(First(nums));
    }
}

Warum nicht einfach object verwenden?

Vor der Einführung von Generics verwendete man object und Typumwandlungen. Dadurch gehen Typsicherheit verloren und Werttypen werden verpackt, was die Leistung beeinträchtigt.

Generische Methoden vermeiden das Boxing von Werttypen und erkennen Typfehler bereits zur Kompilierzeit, statt erst zur Laufzeit eine Ausnahme auszulösen.

// Unsafe: needs a cast and can fail at runtime
object Echo(object o) => o;
int n = (int)Echo(5);

Unterschiedliche Typen zurückgeben

Auch der Rückgabetyp kann generisch sein, sodass eine Methode ihre Ausgabe an den Aufrufer anpassen kann. default(T) liefert bei Werttypen den Standardwert oder bei Referenztypen null.

Das ist nützlich für sichere Fallbacks, wenn kein Wert verfügbar ist.

T OrDefault<T>(bool ok, T value)
{
    return ok ? value : default(T);
}

Kurztest

Testen Sie Ihr Verständnis generischer Methoden.

Zusammenfassung

Generische Methoden deklarieren ihre eigenen Typparameter in spitzen Klammern hinter dem Namen. Der Compiler leitet den Typ normalerweise aus den Argumenten ab, Sie können ihn aber auch ausdrücklich angeben.

Sie gewährleisten Typsicherheit, vermeiden Boxing und können where-Constraints enthalten. Sie können in jeder Klasse platziert werden, unabhängig davon, ob diese selbst generisch ist.

Häufig gestellte Fragen

Ist die Lektion „Generische Methoden“ kostenlos?

Ja — der vollständige Text von „Generische Methoden“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C# Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C# Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Generische Methoden“?

Typparameter für Methoden. Du übst C# Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um C# Academy zu starten?

Keine Vorkenntnisse erforderlich. C# Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Generische Methoden“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser C# Academy-Lektion Code schreiben und ausführen?

Ja. Jede C# Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Generische Methoden
  2. Generische Klassen
  3. where-Einschränkungen
  4. Generische Interfaces
← Zurück zu C# Academy