Каков основной процесс делегатов? - PullRequest
2 голосов
/ 25 июня 2010

Что является основной причиной для представления делегатов, а также является решением для проблем какого типа. Мне нравится знать эту проблему. Заранее спасибо

1 Ответ

5 голосов
/ 25 июня 2010

Вы можете в основном думать о делегатах как о интерфейсах с одним методом. Поэтому в тех случаях, когда язык без делегатов (например, Java) будет использовать интерфейс, имеет смысл иметь делегата.

Делегаты имеют следующие преимущества перед интерфейсами:

  • Реализация может быть закрытой, тогда как методы, реализующие интерфейсы, должны быть открытыми в Java. (C # также имеет явную реализацию интерфейса.)
  • Вы можете реализовать несколько делегатов в одном классе или даже один и тот же тип делегата несколько раз
  • Фреймворк и язык имеют дополнительную поддержку для делегатов:
    • Объединяя их вместе (и удаляя их)
    • Паб / субкаркас (события)
    • Фоновый вызов с использованием пула потоков (BeginInvoke и т. Д.)
    • Лямбда-выражения и анонимные методы упрощают создание «встроенных»
    • Деревья выражений, представляющие логику выражения в данных, а не IL

Делегаты обычно используются для:

  • Обработка событий, например в графическом интерфейсе
  • Предоставление «маленьких» фрагментов поведения, например, фильтры и проекции в LINQ
  • Обратные вызовы для асинхронного программирования

Думайте о них как о способе инкапсулировать один фрагмент поведения и посмотрите, куда вас это приведет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...