I just read C++ vs. C# and thought it might be worthwhile to throw up a few thoughts.  I've been ranting and raving about how great the new Managed C++ (C++/CLI) is.  It's true, it is great, but I still prefer to do most of my work in C#.  Why?

  • C# compiles incredibly fast.  I'm compiling around 80,000 lines and it takes about 20 seconds for a rebuild.  That's from a cold start.  (Chokes a little bit starting up intellisense.)
  • Partial classes.  Code is so much more maintainable when you have many nested classes.  (#include just doesn't compare as a solution.)
  • Anonymous delegates.  An incredible feature for unlocking the power of the new generic collection classes.  (posts to come on this.)
  • No headers and no need to declare before you use.  Both of these can make some nasty looking code sometimes.
  • XML Documentation (Heh, missed this one when I looked last time, it has been awhile... XML Documentation (C++))
  • Constructors can call other constructors in the same class.
  • I'm generally more partial to the way it looks.  That's obviously a simple preference.
  • Generally speaking people seem to be less afraid of C#.  More know it (for managed code) and it's easier to enlist a little extra help on a C# project.

What do I like about Managed C++ over C#?

  • Simple properties.  Mmmm.  Very nice for rapid prototyping.
  • The hat ^.  I like knowing when I've got a managed heap handle.
  • C++ Interop is a much better way to work with unmanaged code if you have to.
  • Mixed assemblies.
  • Easier to get function pointers.  (this is sometimes useful when using the generic collections, not a big thing, however)

If you have to migrate an unmanaged C++ project and want to do it piecemeal, the interop capabilities makes Managed C++ the obvious choice.

(If you have any feedback on what you prefer with either language I'd be happy to hear it.)

(What about VB?  I did a lot with VB6 for awhile, but jumping back and forth between C#, C++, and C++/CLI is enough for my head at the moment.  So, no comment.)