As @Anthony Pegram and @Saif al Harthi have noted, reflector is one such example. It doesn't produce the exact same code that you wrote (mostly because the code that you wrote is optimized before becoming IL), but similar code.
There are ways to fight against it using a class of products known as Code Obfuscators. I don't know enough to compare the products, but a simple web search for "C# Obfuscator" brings up a plethora of both free and commercial tools.
As @Marc Gravell point out, the obfuscation doesn't happen on your source. The obfuscation is generally part of the build process from my understanding, so the IL that is produced is what is obfuscated.