A engenharia reversa é uma técnica usada para obter o código fonte de um software a partir do arquivo já compilado.
Uma ferramenta free que faz isso de forma magistral é o Lutz Roeder Reflector. Esta ferramenta foi criada por um entusiasta de .Net e de tão boa foi comprada pela Red-Gate. A Red-Gate então criou uma versão paga mas manteve uma versão free para benefício da comunidade, como ela própria a denomina.
Para quem lida com tecnologias novas feitas com .Net, como versões beta, componentes de terceiros, bibliotecas com documentação precária entre outros, uma ferramenta que permita ver o que essas tecnologias estão fazendo por "baixo do pano" se torna indispensável. Inclusive, é possível reverter o código-fonte do próprio .Net Framework.
Um período que usei ele intensamente foi quando em 2007 estávamos desenvolvendo uma solução para um cliente utilizando o Workflow Foundation em versão beta e que entraria em homologação ainda na versão RTM. Como a documentação era pouca, nada como investigar as entranhas das bibliotecas para entender seu real funcionamento. Atualmente, "brinco" olhando as dlls do Sharepoint e do próprio .Net Framework.
Além disto, para quem está começando com .Net, nada como aprender olhando o código-fonte dos outros, ou melhor, da Microsoft. Por exemplo, digamos que você vai criar um TextBox redondo, nada como dar uma espiada no código-fonte do TextBox da Microsoft para aprender algumas boas práticas na criação de um componente. Veja imagem a seguir.
E como toda linguagem de programação .Net segue o padrão definido pelo Common Language Specification (CLS) é possível olhar o código na linguagem que você está mais acostumado (VB.NET, C++, Delphi, etc) ou até em Intermediate Language (IL) para quem gosta de sofrer.
3) Navegação pelo próprio código-fonte. Por exemplo, ao clicar no nome de uma classe o código fonte desta classe é exibido.
Bacharel em Ciências da Computacão pela FURB. Pós-graduado em Tecnologias para o Desenvolvimento de Aplicações Web (Java). Microsoft Certified Professional: 70-315 e 70-536. Instrutor de programação de .Net com C#.