Lutz Roeder is my hero
When I first saw Reflector for .NET, I though it was a nice little tool, but the VS.NET object browser handled most of what I needed.
When I first saw Reflector with the built-in decompiler, I thought it was a very cool idea, and may be useful some day.
After using it do solve a problem I was struggling with, I now think Reflector is god-like.
I was trying to figure out how an ASP.NET server control could present a drop-down list of other components on the web form (including not just controls but components in the tray as well, and in this case filtered to just those that implement a certain interface). I knew the DataGrid did it, so I knew there had to be a way, but couldn't find any information about how to do it. Even the server control bible (Kothari) didn't seem cover it.
A little Reflector'ing answered the question. First a peek at the DataSource property attributes pointed me to the DataSourceConverter. And voila, there was the answer. Right there in beautifully readable source code (goto statements aside).
That is just so freakin' cool.
If you're curious about the answer, the ITypeDescriptorContext passed into TypeConvert.GetStandardValues has a Container property. The Container has a Components collection which has all the components on the page - it's even in a flat list, so you don't need to worry about walking down the control hierarchy.
Sweet.