Microsoft announced .Net and C# around the same time, in late June of last year. They volunteered both C# and parts of .Net (the Common Language Infrastructure or CLI) to the same technical committee in ECMA.
Since the pasts of .Net and C# have been intertwined, one might think that their futures will be too, but this isn't necessarily the case. C# could fail as a language and .Net could still succeed, but if .Net fails in the market as a platform, C# will certainly fail.
This is a good thing, even as Microsoft sees it, although I doubt they would put it quite that way. One of the central characteristics of .Net is that it supports multiple programming languages. Maybe C# is an especially good programming for .Net, but it doesn't matter; if you don't want to use C#, you can still write code for .Net using almost any other language.
Support for multiple languages is not something Microsoft just whipped out as a stick with which to beat Java. It's always been a real priority for Microsoft, for both the systems software and development tool ends of its business. Microsoft has been selling multiple languages since the 1970s, and in the 80's it made a big deal about how programs in their various DOS languages could call each other. When COM (Component Object Model) came around, one of its main functions was letting programs written in different languages interoperate.
In fact, C# suffers from almost all of the same things for which Microsoft criticizes Java. It's different enough from other languages that to use it, you have to rewrite your existing applications. At least for now, those applications will only work on .Net--meaning on Windows--although Microsoft's submission of portions of those apps to ECMA makes it possible that this situation will change in the future. But the real difference between Java and C# in this regard is that there's just one language that has any real support on the Java VM. You, the programmer, take your orders from Sun and the rest of the Java oligarchy for how you will write your programs.
The submission of .Net to ECMA's TC-39 was meant to facilitate interoperability between languages, but it also raises the possibility that someone could implement the C# language on some other platform, such as Win9x or, for all I know, the Java VM. Why would someone do this? I can imagine that if C# programming becomes very popular, someone might want to give C# programmers another outlet for their work and a place to port their code. But C# programming will become popular only if .Net becomes popular, because .Net is the platform for which C# programmers would initially be writing. And it's not hard to imagine that C# applications, like applications written in most languages, will become dependent on operating system facilities (.Net stuff) as well as the language itself.
This isn't a bad thing for Microsoft, nor even for .Net. You can argue, though, that it should give programmers pause before they delve too deeply into C#. It's even possible that .Net will become quite popular and C# will languish to the point that Microsoft will slow its work on it, although there's no reason at this point to believe that this will happen. Not only is the jury out on C#, we're barely into voire dire. All sorts of things are still possible.
What's your take on the future of C#? E-mail Larry or post your thoughts in our Talkback forum below.
Larry has written software and computer articles since 1983. He has worked for software companies and IT departments, and has managed test labs at National Software Testing Labs, PC Week, and PC Magazine.