.Net assemblies (like a jar file) have proper versioning, and when you reference them as a dependency you can also include the version of a specific assembly. The result is the ability to have different versions of the same assembly running at the same time, the correct one being resolved by the CLR.
.Net has strong leadership in the form of Anders Hejlsberg. Java is getting closures but C# has them. the downside is that C# is fast approaching C++ bloatiness.
3. Container model.
It seems .Net has dumped the container model of COM+ that Java eventually emulated in EJB. WCF (EJB like managed component model) can be deployed however you like. Most importantly you can write a plain old console application and launch WCF from within it, much in the same manner in which you would launch Spring.
4. Operator overloading.
Nuff said really. It's worth mentioning though that operator overloading in C# doesn't hold much of a candle to Ruby or Scala.
5. Unchecked exceptions.
I know Java also has unchecked exceptions, the big difference is that because .Net doesn't have them, it can make a lot of code a lot cleaner.