So arbeiten Sie mit Action-, Func- und Predicate-Delegaten in C #

Ein Delegat ist ein typsicherer Funktionszeiger, der auf eine Methode verweisen kann, die dieselbe Signatur wie die des Delegaten hat. Delegaten werden verwendet, um Rückrufmethoden zu definieren und die Ereignisbehandlung zu implementieren. Sie werden mit dem Schlüsselwort "delegate" deklariert. Sie können einen Delegaten deklarieren, der einzeln oder sogar in einer Klasse verschachtelt angezeigt werden kann.

Was sind Func- und Action-Delegierte? Wie können sie verwendet werden?

Der grundlegende Unterschied zwischen Func- und Action-Delegaten besteht darin, dass ersterer für Delegaten verwendet wird, die einen Rückgabewert zurückgeben, letzterer jedoch für diejenigen Delegaten, die keinen Rückgabewert haben.

Func ist ein Delegat, der auf eine Methode verweist, die ein oder mehrere Argumente akzeptiert und einen Wert zurückgibt. Action ist ein Delegat, der auf eine Methode verweist, die wiederum ein oder mehrere Argumente akzeptiert, aber keinen Wert zurückgibt. Mit anderen Worten, Sie sollten Action verwenden, wenn Ihr Delegat auf eine Methode verweist, die void zurückgibt.

Ein Prädikat ist ein Delegat, der einen oder mehrere generische Parameter akzeptiert und einen Booleschen Wert zurückgibt. Sie können davon ausgehen, dass es sich um etwas wie Func handelt. Prädikatdelegierte werden normalerweise verwendet, um Suchvorgänge für einige Daten basierend auf einer Reihe von Kriterien durchzuführen.

Programmieren von Aktionsdelegierten in C #

Sie können Delegaten in C # nutzen, um Ereignisse zu implementieren und Methoden zurückzurufen. Ein Delegat in C # ähnelt Funktionszeigern von C ++, aber C # -Delegierte sind typsicher. Sie können Methoden als Parameter an einen Delegaten übergeben, damit der Delegat auf die Methode verweisen kann.

Das folgende Codeausschnitt veranschaulicht die Syntax für die Verwendung des Aktionsdelegaten.

Aktion

Die folgende Codeliste zeigt, wie Sie den Aktionsdelegierten verwenden können. Wenn dieses Code-Snippet ausgeführt wird, wird das Wort "Hallo !!!" im Konsolenfenster.

statische Leere Main (string [] args)

        {

            Aktion Aktion = neue Aktion (Anzeige);

            Aktion ("Hallo !!!");

            Console.Read ();

        }}

statische Leere Anzeige (String-Nachricht)

        {

            Console.WriteLine (Nachricht);

        }}

Programmieren von Func-Delegierten in C #

Lassen Sie uns nun verstehen, wie wir mit Func-Delegierten in C # arbeiten können. Hier ist die Syntax für einen Func-Delegaten.

Func

Das folgende Codeausschnitt zeigt, wie Sie einen Func-Delegaten in C # verwenden können. Es gibt den Wert von Hra aus (berechnet als 40% des Grundgehalts). Das Grundgehalt wird ihm als Argument übergeben.

statische Leere Main (string [] args)

        {

            Func func = new Func (CalculateHra);

            Console.WriteLine (func (50000));

            Console.Read ();

        }}

        statisches Doppel CalculateHra (int basic)

        {

            return (double) (basic * .4);

        }}

Beachten Sie, dass der zweite Parameter in der Deklaration des Func-Delegaten im zuvor angegebenen Code-Snippet den Rückgabetyp der Methode darstellt, auf die der Delegat verweisen würde. In diesem Beispiel wird der berechnete Hra-Wert als doppelt zurückgegeben.

Programmieren von Prädikatdelegierten in C #

Ein Prädikatdelegat wird normalerweise zum Suchen von Elementen in einer Sammlung oder einem Datensatz verwendet. Hier ist die Syntax für einen Prädikat-Delegaten.

Prädikat

Beachten Sie, dass Prädikat im Grunde genommen Func entspricht.

Betrachten Sie die folgende Entitätsklasse mit dem Namen "Kunde".

Klasse Kunde

    {

        public int Id {get; einstellen; }}

        öffentliche Zeichenfolge Vorname {get; einstellen; }}

        öffentlicher String Nachname {get; einstellen; }}

        öffentliche Zeichenfolge Adresse {get; einstellen; }}

        öffentlicher String City {get; einstellen; }}

        öffentlicher String State {get; einstellen; }}

        öffentlicher String Country {get; einstellen; }}

    }}

Erstellen Sie als Nächstes eine Kundenliste und speichern Sie darin Objekte vom Typ Kunde.

 List custList = new List ();

            custList.Add (neuer Kunde {Id = 1, Vorname = "Joydip", Nachname = "Kanjilal", Bundesstaat = "Telengana", Stadt = "Hyderabad", Adresse = "Begumpet", Land = "Indien"});

            custList.Add (neuer Kunde {Id = 2, Vorname = "Steve", Nachname = "Jones", Bundesstaat = "OA", Stadt = "New York", Adresse = "Lake Avenue", Land = "US"}) ;;

Das Folgende ist die vollständige Codeliste, die zeigt, wie wir einen Prädikat-Delegaten zum Suchen von Daten verwenden können.

static void Main(string[] args)

        {

            List custList = new List();

            custList.Add(new Customer { Id = 1, FirstName = "Joydip", LastName = "Kanjilal", State = "Telengana", City = "Hyderabad", Address = "Begumpet", Country = "India" });

            custList.Add(new Customer { Id = 2, FirstName = "Steve", LastName = "Jones", State = "OA", City = "New York", Address = "Lake Avenue", Country = "US" });

            Predicate hydCustomers = x => x.Id == 1;

            Customer customer = custList.Find(hydCustomers);

            Console.WriteLine(customer.FirstName);

            Console.Read();

        }

When the above code snippet is executed, the name “Joydip” will be displayed in the console window.

So machen Sie mehr in C #:

  • Wann wird eine abstrakte Klasse im Vergleich zur Schnittstelle in C # verwendet?
  • So arbeiten Sie mit AutoMapper in C #
  • Verwendung von Lambda-Ausdrücken in C #
  • So arbeiten Sie mit Action-, Func- und Predicate-Delegaten in C #
  • So arbeiten Sie mit Delegierten in C #
  • So implementieren Sie einen einfachen Logger in C #
  • So arbeiten Sie mit Attributen in C #
  • So arbeiten Sie mit log4net in C #
  • So implementieren Sie das Repository-Entwurfsmuster in C #
  • Wie man mit Reflexion in C # arbeitet
  • So arbeiten Sie mit dem Dateisystemwatcher in C #
  • So führen Sie eine verzögerte Initialisierung in C # durch
  • So arbeiten Sie mit MSMQ in C #
  • So arbeiten Sie mit Erweiterungsmethoden in C #
  • Wie wir Lambda-Ausdrücke in C #
  • Wann wird das flüchtige Schlüsselwort in C # verwendet?
  • Verwendung des Schlüsselwortsield in C #
  • So implementieren Sie Polymorphismus in C #
  • So erstellen Sie Ihren eigenen Taskplaner in C #
  • So arbeiten Sie mit RabbitMQ in C #
  • So arbeiten Sie mit einem Tupel in C #
  • Erkundung virtueller und abstrakter Methoden in C #