Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1129 of 1492 menu
◀ ▶

Delegate

Любой делегат наследует Delegate. У экземпляра можно прочитать Method - описание метода, и Target - объект, на котором метод вызывается, или null для статического метода. Так проверяют, что в переменной лежит именно делегат, а не произвольный тип.

Синтаксис

Delegate del = метод; string name = del.Method.Name; object target = del.Target;

Пример

Давайте выведем имя метода у Action:

using System; class Program { static void Ping() { } static void Main() { Action act = Ping; Delegate del = act; Console.WriteLine(del.Method.Name); } }

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

"Ping"

Пример

Давайте сравним пользовательский delegate и Action:

using System; delegate void MyHandler(); class Program { static void Ping() { } static void Main() { MyHandler custom = Ping; Action act = Ping; bool fromDelegate = typeof(MyHandler).IsSubclassOf(typeof(Delegate)) && typeof(Action).IsSubclassOf(typeof(Delegate)); Console.WriteLine(fromDelegate); } }

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

True

Пример

Давайте прочитаем Target у экземплярного метода:

using System; class Worker { public void Run() { } } class Program { static void Main() { var worker = new Worker(); Action act = worker.Run; Delegate del = act; Console.WriteLine(del.Target == worker); } }

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

True

Смотрите также

  • delegate,
    ключевое слово для своего типа делегата
  • Action,
    готовый делегат без возвращаемого значения
  • Combine,
    который склеивает несколько делегатов
  • EventHandler,
    стандартный делегат для событий
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить