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