You can’t fully protect your code from reverse engineering, especially .NET (managed) code. However, you can make it harder to understand by using an obfuscator. An obfuscator replaces certain parts of your code (such as string literals) with an encrypted version so they don’t make sense to the person that tries to reverse engineer your application. Obfuscators are the most popular and powerful solution for protecting your intellectual properties.
A few popular obfuscators for .NET are: Remotesoft .NET Obfuscator, Dotfuscator and Demeanor. You can view more in Google’s directory.