Anonymous classes are demonstrably worse than C# delegates - in addition to superfluous barf in your code files, they increase permgen size by quite a bit per-class for the same end benefit as a delegate.
They're a terrible hack to address a Java deficiency, and they can't really be defended.
Why did they go with that model anyway? I'm sure there was a pre-compile java hack that had really nice lamba style support (although googling I fail to find any evidence of it so maybe I just imagined it) whereas the model they used seems clunky by comparison.
It begins with "they're not all that bright."
C# is not the first time a Java-alike has had delegates. J++ had them too. Way back in the mists of 1995, Microsoft wanted to adopt Java for Windows programming. They came to the conclusion, however, that many parts of Java were somewhere around "canned ass". And it was true--many parts of Java are absolutely broken and have been since the earliest days of its existence. Remote Method Invocation is fundamentally stupid; Java Native Interface is just a terrible spec, hard to implement, and slower than balls. So Microsoft departed from a strict interpretation of the Java spec, providing optional components that, while restricting your application to the MSJVM (and later Kaffe, not that the "hurr, Microsoft is evil" crowd wants to rememver that), allowed you to write much nicer, much more effective Windows applications, using Java. These included Windows Foundation Classes, a Java analogue to the C++ MFC libraries, and some language extensions, including a callback/delegate system.
The Sun response to Microsoft adding delegates to J++, itself tellingly stupid, can be found here:
http://java.sun.com/docs/white/delegates.htmlSun was never a good shepherd for Java, and the overly academic point of view expressed in that article are a big part of why. They are undoubtedly correct in the notion that inner classes are "more object-oriented" than delegates. And y'know what? Who cares? Something that is easy and effective for developers to use is worth more to those developers than a perfect object model. (The argument they make is weakened by the obviously effective, solidly OOP implementation of delegates in C#, fitting seamlessly into the ecosystem without a problem.)