Реальные преимущества делегатов .Net над классами anon Java? - PullRequest
2 голосов
/ 07 августа 2009

Я знаю, что многие применения .Net-делегатов можно эмулировать в Java, используя комбинацию интерфейсов и анонимных классов, но есть ли ситуации, когда делегаты имеют реальное преимущество и нет эквивалента Java?

Ответы [ 2 ]

9 голосов
/ 07 августа 2009
  • Гораздо более краткий синтаксис в C # с лямбда-выражениями и анонимными методами
  • Тип логического вывода
  • Общая поддержка делегатов на языке (преобразования групп методов и т. Д.)
  • Многоадресные делегаты с поддержкой языков
  • События (простой синтаксис для шаблона наблюдателя на основе делегатов)
  • Асинхронное выполнение через системный пул потоков
  • Деревья выражений с поддержкой языков

Да, многое из этого можно сделать на Java, но это просто больно.

Представьте, что вы пишете запросы LINQ, но без лямбда-выражений, методов расширения и т. Д. Это было бы отвратительно. То же самое касается многих других мест, где делегаты являются естественным решением в C # или .NET - идиоматическое решение Java часто не использует анонимные внутренние классы, потому что они чертовски уродливы.

0 голосов
/ 08 августа 2009

реальных замыканий с анонимными методами в c #

с анонимными классами в java, вы должны объявить каждую переменную, которую вы используете из внешней области видимости, как final

...