To view parent comment, click here.
To read all comments associated with this story, please click here.
Because in several aspects, C# is better than Java:
* Properties are a nice and elegant way to expose object attributes.
* Delegates are an easier way to provide callback behavior instead of creating inner or anonymous classes.
* Autoboxing in C# is more natural and built from teh ground. In Java is an adding to the Java programming language, but not in the JVM.
* Generics in C# are supported for the CLR, the generic specialization is done when instancing a class [the assembly is loaded into the CLR with the specific types]. In Java, generics are just "syntactic sugar".
* For the last point, generics in C# provide information about the types specialized in every instance. Java forgets everything and marks everything as Object [type erasure].
* java.util.ArrayList<Integer> performs poorly compared to System.Collections.Generic.ArrayList<int>
* PInvoke infrastructure is easier to use than JNI
* The "override" keyword in C# avoids several errors.
And about Mono, yes, it goes behind the reference implementation, but they are also implementing new and interesting stuff [Gtk#, Cocoa#, Mono.Posix, etc.]
DISCLAIMER: I am a Java programmer.
Edited 2009-07-01 16:31 UTC
* Properties or how to spend your life typing { get; set; }. It is so "automatic". Sometimes I guess if they're "really" useful.
* Not being able to create a dummy anonymous class using an interface is not a good reason to put "delegates". So you get the compiler creating special classes and special objects to have a pointer to a type safe function. And you end up using the event keyword to use them on interfaces. Messy...
* Autoboxing and the using System for the upper case s in the string (String). "totally integrated"
* Generics, if they work don't care much how.
* Well, while working inside a generic class you don't know the future types unless you ask for the type and do your "hacky" things. What hacks are you doing in your code?
* I'm sure that there are 100 things in C# that work better than in java. But I'm sure of the opposite too.
* I felt the same "pain" invoking outside things in java, C# and python.
* The override and new keywords can "create" several errors. But as always it's on you, programmer, to use them right.
Mono is the ugly brother of c#. While your pretty brother has static reflection and many other nice things, you just say "hey, but I have cookies". Well, you can eat all your cookies.
DISCLAIMER: I was a java programmer, I'm a C# programmer.






Member since:
2008-06-12
Well both Flash and Java had a official Linux Runtimes. Even though they weren't opensource it does tell something about the vendors attitude towards Linux.
As for Java; Sun has always been cooperative in ragards to Java; just look at FreeBSD (http://www.freebsd.org/java/) : "The FreeBSD Foundation has negotiated a license with Sun Microsystems to distribute FreeBSD binaries for the Java Runtime Environment (JRE™) and Java Development Kit (JDK™)".
Also for as far as I know there are no official licensees for the .NET platform. In contrast to Java where there are lots of them (http://en.wikipedia.org/wiki/List_of_Java_virtual_machines)
So I think we can safely say there is a world of difference between Sun's Java Platform and Microsoft's .NET Platform.
I also wonder why people today want to use .NET in a *nix environment (where Mono obviously lags behind its reference implementation) when you can use Java, a similar platform that is a 100% open source ?