Как да работя с Action, Func и Predicate делегати в C #

Делегатът е типов безопасен функционален указател, който може да препраща към метод, който има същия подпис като този на делегата. Делегатите се използват за дефиниране на методи за обратно извикване и реализиране на обработка на събития и се декларират с помощта на ключовата дума „делегат“. Можете да декларирате делегат, който може да се появи сам или дори да е вложен в клас.

Какво представляват делегатите на Func и Action? Как могат да се използват?

Основната разлика между делегата на Func и Action е, че докато първият се използва за делегати, които връщат стойност, вторият може да се използва за тези делегати, в които нямате никаква върната стойност.

Func е делегат, който сочи към метод, който приема един или повече аргументи и връща стойност. Действието е делегат, който сочи към метод, който от своя страна приема един или повече аргументи, но не връща стойност. С други думи, трябва да използвате Action, когато вашият делегат сочи към метод, който връща void.

Предикатът е делегат, който приема един или повече общи параметри и връща булева стойност - можете да предположите, че е нещо като Func. Делегатите на предикати обикновено се използват за извършване на операции за търсене на някои данни въз основа на набор от критерии.

Делегати за програмиране на действие в C #

Можете да се възползвате от делегатите в C # за внедряване на събития и методи за обратно извикване. Делегат в C # е подобен на указателите на функции на C ++, но делегатите на C # са безопасни за типа. Можете да предавате методи като параметри на делегат, за да позволите на делегата да сочи към метода.

Следният кодов фрагмент илюстрира синтаксиса за използване на делегат за действие.

Действие

Следният списък с кодове показва как можете да използвате делегат за действие. Този кодов фрагмент при изпълнение ще отпечата думата „Здравейте !!!“ в прозореца на конзолата.

static void Main (низ [] аргументи)

        {

            Действие действие = ново действие (дисплей);

            действие („Здравей !!!“);

            Console.Read ();

        }

статичен празен дисплей (низ съобщение)

        {

            Console.WriteLine (съобщение);

        }

Програмиране на функционални делегати в C #

Нека сега разберем как можем да работим с представители на Func в C #. Ето синтаксиса на делегат на Func.

Функ

Следният кодов фрагмент илюстрира как можете да използвате делегат на Func в C #. Отпечатва стойността на Hra (изчислена като 40% от основната заплата). Основната заплата му се предава като аргумент.

static void Main (низ [] аргументи)

        {

            Func func = нов Func (CalculateHra);

            Console.WriteLine (func (50000));

            Console.Read ();

        }

        статичен двоен CalculateHra (int basic)

        {

            връщане (двойно) (основно * .4);

        }

Обърнете внимание, че вторият параметър в декларацията на делегата Func в кодовия фрагмент, даден по-рано, представлява типа връщане на метода, към който би посочил делегатът. В този пример изчислената стойност на Hra се връща като двойна.

Програмиране на предикатни делегати в C #

Делегат на предикати обикновено се използва за търсене на елементи в колекция или набор от данни. Ето синтаксиса на делегат на предикат.

Предикат

Имайте предвид, че предикатът е основно еквивалентен на Func.

Помислете за следния клас обект с име Клиент.

клас Клиент

    {

        public int Id {get; комплект; }

        публичен низ FirstName {get; комплект; }

        публичен низ LastName {get; комплект; }

        публичен низ Адрес {get; комплект; }

        публичен низ Град {get; комплект; }

        публичен низ State {get; комплект; }

        публичен низ Държава {get; комплект; }

    }

След това създайте списък с клиенти и съхранявайте в него обекти от тип Клиент.

 Списък custList = нов Списък ();

            custList.Add (нов клиент {Id = 1, FirstName = "Joydip", LastName = "Kanjilal", State = "Telengana", City = "Hyderabad", Address = "Begumpet", Country = "India"});

            custList.Add (нов клиент {Id = 2, FirstName = "Steve", LastName = "Jones", State = "OA", City = "New York", Address = "Lake Avenue", Country = "US"}) ;

Следва пълният списък с кодове, който показва как можем да използваме делегат на Predicate за търсене на данни.

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.

Как да направите повече в C #:

  • Кога да се използва абстрактен клас срещу интерфейс в C #
  • Как да работя с AutoMapper в C #
  • Как да използвам ламбда изрази в C #
  • Как да работя с Action, Func и Predicate делегати в C #
  • Как да работя с делегати в C #
  • Как да внедрите прост регистратор в C #
  • Как да работя с атрибути в C #
  • Как да работя с log4net в C #
  • Как да приложим шаблона за проектиране на хранилището в C #
  • Как да работя с отражение в C #
  • Как да работя с файлова система за наблюдение в C #
  • Как да извършите мързелива инициализация в C #
  • Как да работите с MSMQ в C #
  • Как да работя с методи за разширение в C #
  • Как да използваме ламбда изрази в C #
  • Кога да се използва летливата ключова дума в C #
  • Как да използвам ключовата дума yield в C #
  • Как да приложим полиморфизъм в C #
  • Как да изградите свой собствен планировчик на задачи в C #
  • Как да работя с RabbitMQ в C #
  • Как да работите с кортеж в C #
  • Проучване на виртуални и абстрактни методи в C #