Hur man arbetar med Action, Func och Predicate-delegater i C #

En delegat är en typsäker funktionspekare som kan referera till en metod som har samma signatur som delegaten. Delegater används för att definiera återuppringningsmetoder och implementera händelsehantering och deklareras med hjälp av "delegera" nyckelordet. Du kan förklara en delegat som kan visas på egen hand eller till och med kapslad i en klass.

Vad är Func- och Action-delegater? Hur kan de användas?

Den grundläggande skillnaden mellan Func och Action-delegater är att medan den tidigare används för delegater som returnerar värde, kan den senare användas för de delegater där du inte har något returvärde.

Func är en delegat som pekar på en metod som accepterar ett eller flera argument och returnerar ett värde. Action är en delegat som pekar på en metod som i sin tur accepterar ett eller flera argument men inte returnerar något värde. Med andra ord bör du använda Action när din delegat pekar på en metod som returnerar ogiltig.

Ett predikat är en delegat som accepterar en eller flera generiska parametrar och returnerar ett booleskt värde - du kan anta att det är ungefär som Func. Predikatdelegater används vanligtvis för att utföra sökoperationer på vissa data baserat på en uppsättning kriterier.

Programmering av handlingsdelegater i C #

Du kan dra nytta av delegater i C # för att implementera händelser och återkallningsmetoder. En delegat i C # liknar funktionspekare för C ++, men C # -delegater är typsäkra. Du kan skicka metoder som parametrar till en delegat så att delegaten kan peka på metoden.

Följande kodavsnitt illustrerar syntaxen för att använda Action delegate.

Handling

Följande kodlista visar hur du kan använda Action delegate. Detta kodavsnitt när det körs skulle skriva ut ordet “Hej !!!” i konsolfönstret.

static void Main (sträng [] args)

        {

            Åtgärdsåtgärd = ny åtgärd (display);

            action ("Hej !!!");

            Console.Read ();

        }

statisk ogiltig visning (strängmeddelande)

        {

            Console.WriteLine (meddelande);

        }

Programmera funk-delegater i C #

Låt oss nu förstå hur vi kan arbeta med Func-delegater i C #. Här är syntaxen för en Func-delegat.

Funktion

Följande kodavsnitt illustrerar hur du kan använda en Func-delegat i C #. Det skriver ut värdet på Hra (beräknat som 40% av grundlönen). Grundlönen överförs till den som ett argument.

static void Main (sträng [] args)

        {

            Func func = ny Func (CalculateHra);

            Console.WriteLine (func (50000));

            Console.Read ();

        }

        statisk dubbel BeräknaHra (int grundläggande)

        {

            returnera (dubbel) (grundläggande * .4);

        }

Observera att den andra parametern i funktionsdelegatens deklaration i kodavsnittet som ges tidigare representerar returtypen för den metod som delegaten skulle peka på. I det här exemplet returneras det beräknade Hra-värdet som dubbelt.

Programmering Predikera delegater i C #

En predikatdelegat används vanligtvis för att söka efter objekt i en samling eller en uppsättning data. Här är syntaxen för en predikatdelegat.

Predikat

Observera att Predicate i princip motsvarar Func.

Tänk på följande enhetsklass med namnet Kund.

klasskund

    {

        public int Id {get; uppsättning; }

        public string Förnamn {get; uppsättning; }

        public string LastName {get; uppsättning; }

        public string Adress {get; uppsättning; }

        public string City {get; uppsättning; }

        public string State {get; uppsättning; }

        public string Country {get; uppsättning; }

    }

Skapa sedan en lista med kunder och lagra objekt av typen Kund i den.

 Lista custList = ny lista ();

            custList.Add (ny kund {Id = 1, FirstName = "Joydip", LastName = "Kanjilal", State = "Telengana", City = "Hyderabad", Adress = "Begumpet", Land = "Indien"});

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

Följande är den kompletta kodlistan som visar hur vi kan använda en predikatdelegat för att söka data.

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.

Hur man gör mer i C #:

  • När ska man använda en abstrakt klass mot gränssnitt i C #
  • Hur man arbetar med AutoMapper i C #
  • Hur man använder lambdauttryck i C #
  • Hur man arbetar med Action, Func och Predicate-delegater i C #
  • Hur man arbetar med delegater i C #
  • Hur man implementerar en enkel logger i C #
  • Hur man arbetar med attribut i C #
  • Hur man arbetar med log4net i C #
  • Hur man implementerar förvarets designmönster i C #
  • Hur man arbetar med reflektion i C #
  • Hur man arbetar med filsystemwatcher i C #
  • Hur man utför lat initialisering i C #
  • Hur man arbetar med MSMQ i C #
  • Hur man arbetar med förlängningsmetoder i C #
  • Hur vi lambdauttryck i C #
  • När ska du använda det flyktiga nyckelordet i C #
  • Så här använder du nyckelordet i C #
  • Hur man implementerar polymorfism i C #
  • Hur man bygger din egen uppgiftsschemaläggare i C #
  • Hur man arbetar med RabbitMQ i C #
  • Hur man arbetar med en tuple i C #
  • Utforska virtuella och abstrakta metoder i C #