Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> Язык C

Анонимные методы в C#: Упрощение работы с делегатами

Суть анонимных методов

Мы уже знаем, что делегаты ссылаются на методы с соответствующей сигнатурой. Анонимные методы позволяют передать блок кода в качестве параметра делегата. Это методы без имени, состоящие только из тела.

В анонимном методе не нужно указывать тип возвращаемого значения — он выводится из оператора return внутри тела метода.

Написание анонимного метода

Анонимные методы объявляются при создании экземпляра делегата с помощью ключевого слова delegate. Например:

delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x) {
    Console.WriteLine("Anonymous Method: {0}", x);
};

Блок кода Console.WriteLine("Anonymous Method: {0}", x); является телом анонимного метода.

Делегат можно вызывать как с анонимными, так и с именованными методами одинаково — передавая параметры методу в объект делегата. Например: nc(10);

Пример

Ниже демонстрируется использование анонимных и именованных методов с одним делегатом.

Live Demo
using System;
delegate void NumberChanger(int n);
namespace DelegateAppl {
    class TestDelegate {
        static int num = 10;
        public static void AddNum(int p) {
            num += p;
            Console.WriteLine("Named Method: {0}", num);
        }
        public static void MultNum(int q) {
            num *= q;
            Console.WriteLine("Named Method: {0}", num);
        }
        public static int getNum() {
            return num;
        }
        static void Main(string[] args) {
            // создание делегата с анонимным методом
            NumberChanger nc = delegate(int x) {
                Console.WriteLine("Anonymous Method: {0}", x);
            };
            // вызов через анонимный метод
            nc(10);
            // инстанцирование делегата именованным методом
            nc = new NumberChanger(AddNum);
            nc(5);
            // другой именованный метод
            nc = new NumberChanger(MultNum);
            nc(2);
            Console.ReadKey();
        }
    }
}

Результат выполнения:

Anonymous Method: 10
Named Method: 15
Named Method: 30

Язык C

  1. Абстрактные классы и методы в C#: практическое руководство
  2. Частичные классы и методы в C#: понимание и применение
  3. Sealed-классы и sealed-методы в C#: когда использовать, примеры и повышение безопасности кода
  4. Освоение перегрузки методов в C#: концепции, примеры и лучшие практики
  5. Lambda-функции в Python: практическое руководство по анонимным функциям
  6. Анонимные внутренние классы в Java: определение, синтаксис и практические примеры
  7. Java 8 Default Methods: улучшение интерфейсов и обратная совместимость
  8. Методы в C#: определение, вызов, рекурсия и параметры
  9. Понимание делегатов в C#: Руководство по ссылкам на методы и событиям
  10. Метод EPA 21: комплексный протокол обнаружения и устранения утечек