C# is a creation of Microsoft which intended to make Windows programming more powerful.
And now for an entirely different point of view...
Microsoft is hearing footsteps from us open source zealots and needs to continue to obfuscate the inner workings (e.g. API's, FS, XAML, etc.) of their systems to prevent, or at least delay, the development of open source equivalents. It's either that or innovate.
They are doing this with their .net framework, their extensions to XML (XAML), and their new Filesystem (they haven't even documented NTFS as of yet).
The other reason why Microsoft needs to do this is because their customers aren't really seeing the need to upgrade their system. Those that did and bought the extended support got burned by Microsoft.
So, by modifying their OS to the point where it is no longer compatible with their own stuff, they force their very own customers into upgrading. Doubtful? Try buying a namebrand PC with something other than XP or 2k. See many copies of 98SE or ME at Walmart lately? Didn't think so
Seen any backported drivers for the latest hardware to 98 lately? No? You won't.
So if you buy new hardware, it must run the latest version of Windows (that is if you run Windows at all). This essentually requires the latest Microsoft software to be used as a
hardware design requirement.
And you won't see the third party developers complain either, this means a new version is necessary and that means more money. Of course, any developer that isn't a friend, or is considered a threat, doesn't get critical information on the new API's.
Something about cutting off the air supply if I recall correctly...
They are also cranking out patents at the rate of about ten a week. Many of them for extremely self-evident "discoveries". One recent one is for determining the users intent based on the length of the press of a button. Another is for a side-scrolling mouse wheel. Please...
And as we have recently seen, about all these patents are really good for is to bludgeon your competitor into submission. In all fairness to Microsoft, this is exactly what other companies have done to them (Sun, Intertrust) so I can't really blame them for wanting to get some back.
So, since C# is nothing more than Microsoft's attempt to hijack the future development of the C language(s), I would say that there isn't any competitive advantage for you to use C#. There would be one for Microsoft of course.
And keep in mind that this is exactly the reason why Microsoft dumped Java when it couldn't incorporate its own extensions into it. If they can't control it, then they must kill it.
So the plan is to maintain control of a technology and keep tweaking the API's so that competitors have to continually update their software just to keep it running (e.g. DrDOS, Lotus to name just two).
Or in Microsoft's very own words, "Embrace, Extend, Extinguish".
And Microsoft doesn't seem to fear any repercussions for their monopolistic behavior since the U.S. government was quite happy to allow Microsoft to set their own terms when they lost their anti-trust case (the "Seattlement").
The EU however, is an entirely different matter, they have thrashed Microsoft and are holding firm on software patents (so go EU!).
Not that I'm biased...
So the upshot is use C# if you feel that it gives you an advantage, otherwise stick with plain old C or C++ (or Visual Basic).
And to try to be fair to Microsoft, I think that many of their products are very nice indeed (love their mice and Xbox, VB is very handy, and you can't beat MSHearts). And I have a small shrine devoted to the PowerQuest guys for their Partition Magic product.
I just don't like their business practices. And judging by the number of companies that they have trampled over, I'm not alone.
Sorry to go on and on
John