Jak pracować z delegatami Action, Func i Predicate w C #

Delegat to bezpieczny typ wskaźnika funkcji, który może odwoływać się do metody, która ma taki sam podpis jak delegat. Delegaci są używani do definiowania metod wywołania zwrotnego i implementowania obsługi zdarzeń. Są deklarowani za pomocą słowa kluczowego „delegate”. Możesz zadeklarować delegata, który może pojawiać się samodzielnie lub nawet zagnieżdżony w klasie.

Czym są delegaci Func i Action? Jak można ich używać?

Podstawowa różnica między delegatami Func i Action polega na tym, że podczas gdy ten pierwszy jest używany dla delegatów, którzy zwracają wartość, drugi może być używany dla tych delegatów, w których nie masz żadnej wartości zwracanej.

Func to delegat wskazujący na metodę, która akceptuje jeden lub więcej argumentów i zwraca wartość. Action to delegat wskazujący na metodę, która z kolei akceptuje jeden lub więcej argumentów, ale nie zwraca żadnej wartości. Innymi słowy, powinieneś użyć Action, gdy delegat wskazuje na metodę, która zwraca void.

Predykat to delegat, który akceptuje jeden lub więcej parametrów ogólnych i zwraca wartość logiczną - możesz założyć, że jest to coś w rodzaju Func. Delegaty predykatów są zwykle używane do wykonywania operacji wyszukiwania na niektórych danych na podstawie zestawu kryteriów.

Programowanie delegatów akcji w języku C #

Możesz skorzystać z delegatów w C #, aby implementować zdarzenia i wywoływać metody. Delegat w C # jest podobny do wskaźników funkcji w C ++, ale delegaci C # są bezpieczni pod względem typu. Możesz przekazać metody jako parametry do delegata, aby umożliwić delegatowi wskazanie metody.

Poniższy fragment kodu ilustruje składnię używania delegata akcji.

Akcja

Poniższa lista kodu pokazuje, jak można używać delegata akcji. Ten fragment kodu po wykonaniu spowodowałby wypisanie słowa „Hello !!!” w oknie konsoli.

static void Main (string [] args)

        {

            Akcja akcja = nowa akcja (wyświetlanie);

            akcja („Cześć !!!”);

            Console.Read ();

        }

static void Display (komunikat tekstowy)

        {

            Console.WriteLine (wiadomość);

        }

Programowanie delegatów Func w C #

Zobaczmy teraz, jak możemy pracować z delegatami Func w C #. Oto składnia delegata Func.

Func

Poniższy fragment kodu ilustruje, jak można używać delegata Func w C #. Wyświetla wartość Hra (liczoną jako 40% wynagrodzenia podstawowego). Wynagrodzenie zasadnicze jest mu przekazywane jako argument.

static void Main (string [] args)

        {

            Func func = new Func (CalculateHra);

            Console.WriteLine (func (50000));

            Console.Read ();

        }

        statyczne podwójne CalculateHra (int basic)

        {

            return (double) (basic * .4);

        }

Należy zauważyć, że drugi parametr w deklaracji delegata Func we fragmencie kodu podanym wcześniej reprezentuje zwracany typ metody, na którą delegat wskazywałby. W tym przykładzie obliczona wartość Hra jest zwracana jako double.

Programowanie predykatów delegatów w C #

Delegat predykatu jest zwykle używany do wyszukiwania elementów w kolekcji lub zestawie danych. Oto składnia delegata predykatu.

Orzec

Zauważ, że Predicate jest w zasadzie odpowiednikiem Func.

Rozważmy następującą klasę jednostki o nazwie Customer.

klasa Klient

    {

        public int Id {get; zestaw; }

        public string FirstName {get; zestaw; }

        public string LastName {get; zestaw; }

        public string Address {get; zestaw; }

        public string City {get; zestaw; }

        public string State {get; zestaw; }

        public string Country {get; zestaw; }

    }

Następnie utwórz listę klientów i zapisz w niej obiekty typu Customer.

 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"}) ;

Poniżej znajduje się pełna lista kodu, która pokazuje, jak możemy użyć delegata Predicate do wyszukiwania danych.

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.

Jak zrobić więcej w C #:

  • Kiedy używać klasy abstrakcyjnej, a kiedy interfejsu w języku C #
  • Jak pracować z AutoMapper w C #
  • Jak używać wyrażeń lambda w C #
  • Jak pracować z delegatami Action, Func i Predicate w C #
  • Jak pracować z delegatami w C #
  • Jak zaimplementować prosty rejestrator w C #
  • Jak pracować z atrybutami w C #
  • Jak pracować z log4net w C #
  • Jak zaimplementować wzorzec projektu repozytorium w C #
  • Jak pracować z odbiciem w C #
  • Jak pracować z Filesystemwatcher w C #
  • Jak wykonać leniwą inicjalizację w C #
  • Jak pracować z MSMQ w C #
  • Jak pracować z metodami rozszerzającymi w C #
  • Jak nam wyrażenia lambda w C #
  • Kiedy używać słowa kluczowego volatile w języku C #
  • Jak używać słowa kluczowego yield w języku C #
  • Jak zaimplementować polimorfizm w C #
  • Jak zbudować własny harmonogram zadań w C #
  • Jak pracować z RabbitMQ w C #
  • Jak pracować z krotką w C #
  • Eksplorowanie metod wirtualnych i abstrakcyjnych w C #