C# paradigm shift
Everybody knows that c# had introduced lambdas in version 3.0, but it takes some time to change the way you program before.
It helps a lot if you are familiar with some modern dynamic languages like Ruby.
I realized that things changes when I found this library, NDesk.Options. I recognized right away familiar pattern of heavy callback usage which is expected in Ruby code. But not in C#. At least not until now. C# team admits that they are looking at dynamic languages and trying to provides dynamic benefits without losing static type check safety. And I must admit that they are doing remarkable job in balancing past and future. Unlike Java which seems stuck in the past. Java didn't manage to implement even descent generics functionality.
Here is an example of handling command line options in callback style:
new NDesk.Options.OptionSet().
Add("file=", o => {_walker.AddFile(o);}).
Add("dump:", o=> { Dump(o); }).
Parse(args);
You add processing option as a pair of option string and a callback action. When option parser will parse parameters, it will call your code back.
Traditional way would be perhaps inheriting from some BaseParserOption calss, overriding some method like "OnOptionMatch", writing a constructor with option to be matched, etc. Creating a class is too much hassle if you want just call a function or modify property for later usage. Often callback style helps reducing code size and make it more readable.
Don't overuse it though, always compare, which code will be more elegant, with callback or inheritance/interface.