C# Programming

C# Methodenübergabe meistern

Spread the love

C# ermöglicht es Ihnen, Methoden als Parameter an Funktionen zu übergeben, wodurch die Flexibilität und Wiederverwendbarkeit des Codes erheblich verbessert wird. Diese Fähigkeit ist entscheidend für die Implementierung von Callbacks, Ereignisbehandlungen und strategischen Mustern, bei denen das Laufzeitverhalten die spezifische Aktion bestimmt. Dieser Artikel untersucht verschiedene Ansätze, um dies zu erreichen, wobei der Schwerpunkt auf benutzerdefinierten Delegaten, Func<> und Action<> liegt.

Inhaltsverzeichnis

Verwenden von benutzerdefinierten Delegaten zum Übergeben von Methoden als Parameter

Delegaten in C# dienen als typsichere Funktionszeiger. Die Erstellung eines benutzerdefinierten Delegaten bietet granulare Kontrolle und Klarheit, wenn die Methodensignatur von den integrierten Func<>– oder Action<>-Delegaten abweicht. Betrachten Sie eine Funktion, die eine Operation an einer Zahl durchführt und dann das Ergebnis anzeigt, wobei die Operation selbst ein Parameter ist.


// Definition eines benutzerdefinierten Delegaten
public delegate double MathOperation(double x);

public class Beispiel
{
    public static void OperationAusführenUndAusgeben(double num, MathOperation operation)
    {
        double result = operation(num);
        Console.WriteLine($"Ergebnis: {result}");
    }

    public static double Quadrat(double x) => x * x;
    public static double Kubus(double x) => x * x * x;

    public static void Main(string[] args)
    {
        OperationAusführenUndAusgeben(5, Quadrat); // Ausgabe: Ergebnis: 25
        OperationAusführenUndAusgeben(5, Kubus);  // Ausgabe: Ergebnis: 125
    }
}

MathOperation fungiert als Delegat, der eine Methode darstellt, die einen double akzeptiert und einen double zurückgibt. OperationAusführenUndAusgeben akzeptiert diesen Delegaten, wodurch die Verwendung von Quadrat, Kubus oder jeder konformen Methode ermöglicht wird.

Verwendung des Func<>-Delegaten

Func<> ist ein generischer Delegat, der eine Methode mit null oder mehr Eingabeparametern und einem Rückgabewert darstellt. Seine integrierte Natur vereinfacht viele Szenarien. Lassen Sie uns das vorherige Beispiel umgestalten:


public class Beispiel
{
    public static void OperationAusführenUndAusgeben(double num, Func<double, double> operation)
    {
        double result = operation(num);
        Console.WriteLine($"Ergebnis: {result}");
    }

    public static double Quadrat(double x) => x * x;
    public static double Kubus(double x) => x * x * x;

    public static void Main(string[] args)
    {
        OperationAusführenUndAusgeben(5, Quadrat); // Ausgabe: Ergebnis: 25
        OperationAusführenUndAusgeben(5, Kubus);  // Ausgabe: Ergebnis: 125
    }
}

Dies erreicht das gleiche Ergebnis mit weniger Code. Func<double, double> gibt eine Methode an, die einen double akzeptiert und einen double zurückgibt. Generische Typparameter passen sich verschiedenen Methodensignaturen an (z. B. Func<int, string>).

Verwendung des Action<>-Delegaten

Action<> ist ein generischer Delegat für Methoden mit null oder mehr Eingabeparametern und einem void-Rückgabetyp (kein Rückgabewert). Verwenden Sie ihn, wenn Methoden keine Werte zurückgeben.


public class Beispiel
{
    public static void AktionAusführen(string message, Action<string> action)
    {
        action(message);
    }

    public static void NachrichtAusgeben(string msg) => Console.WriteLine(msg);
    public static void NachrichtInGrossbuchstabenAusgeben(string msg) => Console.WriteLine(msg.ToUpper());

    public static void Main(string[] args)
    {
        AktionAusführen("Hallo, Welt!", NachrichtAusgeben);       // Ausgabe: Hallo, Welt!
        AktionAusführen("Hallo, Welt!", NachrichtInGrossbuchstabenAusgeben); // Ausgabe: HALLO, WELT!
    }
}

Action<string> repräsentiert eine Methode, die eine Zeichenkette akzeptiert und nichts zurückgibt. AktionAusführen verwendet dies, um verschiedene Druckaktionen auszuführen.

Fazit

Das Übergeben von Methoden als Parameter ist eine leistungsstarke C#-Funktion. Benutzerdefinierte Delegaten bieten maximale Kontrolle, während Func<> und Action<> bequeme integrierte Lösungen bieten. Der beste Ansatz hängt von den spezifischen Anforderungen Ihrer Anwendung ab. Die Beherrschung dieser Techniken ist der Schlüssel zum Schreiben anpassungsfähigeren und wartungsfreundlicheren C#-Codes.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert