.Net is NOT a programming language, it is an application framework.
When you write a .Net application, no matter what language you use, it gets compiled down to an Intermediate Language(IL). When a user executes that app the IL code is loaded and ran by the Just In Time(JIT) Compiler. Because of this the applications memory management and garbage collection is taken care of, greatly reducing buffer overflows and memory leaks.
A .Net application is also language independent. That means that if you were writting a sound recording app for windows in C#, but someone else has already written a fantastic API in Python.Net, it doesn't matter. You can either import the resulting dll of the API (closed source), or the project (if it's open source), and add it to your solution. Once in, you can access it's class through C# without any hassle at all. The syntax you use is all C# even though the functions you're calling are written in Python. Thats all because both code sets compile down to the IL for seemless integration. This is a fantastic ability when you have a large number of class libraries written by a number of developers with varying language tastes.
Also, because the IL is standardized, non-MS languages (like Python) can and have been ported over to .Net versions.
Another up and coming feature is cross-platform applications. Check out the Mono Project to see how some fantastic open source dev's have brought .NET to the linux community.
My personal reason for embracing .Net has been the incredible organization of Classes within the Framework. Rapid Application Developement is a breeze when 90% of what you need to do is either easy to remember or intuitive.