Книга: C# для профессионалов. Том II

Делегаты

Делегаты

Делегаты являются членами пространства имен, которые инкапсулируют ссылку на метод внутри объекта делегата. Объект делегата может затем передаваться в код, вызывающий указанный метод, не зная во время компиляции, какой метод будет вызван. Красоту, мощь и гибкость делегатов можно увидеть только с помощью примера. Давайте посмотрим, как работают делегаты:

namespace Samples {
 using System;
 using System.Collections;
 public delegate void TestDelegate(string k); // определяет делегата,
  // который получает строку в качестве аргумента
 public class Sample {
  public Sample() {}
  public void test(string i) {
   Console.WriteLine(i + " has been invoked.");
  }
  public void text2(string j) {
   Console.WriteLine("this is another way to invoke {0}" + j);
  }
  public static void Main(string[] args) {
   Sample sm = new Sample();
   TestDelegate aDelegate = new TestDelegate(sm.test);
   TestDelegate anotherDelegate = new TestDelegate(sm.test2);
   aDelegate("test");
   anotherDelegate("test2");
  }
 }
}

Первый шаг по использованию делегатов состоит в определении делегата. Наш тестовый делегат определяется в строке public delegate void TestDelegate(string k); . Затем определяется класс с методами, которые имеют сигнатуру, аналогичную делегату. Конечный шаг заключается в создании экземпляра делегата который создается так же, как экземпляр класса и реализуется с помощью оператора new. Единственное различие состоит в том, что имя целевого метода передается делегату как аргумент. Затем вызывается делегат. В примере вызывается экземпляр aDelegate с помощью вызова aDelegate("test");.

Оглавление книги


Генерация: 0.207. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз