“一次编程,多处执行”一直是程序设计的一个诉求,尤其是在现代Internet时代。在跨平台方面,Java的支持和实现都是为人称道的,虽然JVM的速度仍然让人备感头疼。而C#虽然在底层构造方面对移植性进行了充分的考虑,但至少目前还没有出现成熟的、经过检验的产品。C#在跨平台方面似乎更热衷于xml Web Services互操作,而不是跨平台编程。但C#通过其基础语言构造(CLI)对二十多种主流语言对象级的互操作支持,又极大地提升了C#的技术地位。和COM组件廉价的互操作也为C#挣到不少分数——保持一个兼容的体系对现代软件工业非常重要,也是对广大开发人员负责的表现。
除去这些语言层面的组件支持机制,.NET平台也为组件的配置、运行和治理提供了一揽子解决方案,为组件开发量身定做的Visual Studio .NET更是令人兴奋,这些都为C#的组件编程开辟了广阔的天地。在其他技术方面Java的微弱劣势尚且可以忽略不计,但在组件编程方面Java相较于C#却有着不可治愈的硬伤。尤其对于从C++和VB背景过来的开发人员,C#在这方面有着不可反抗的魅力和诱惑。
鉴于XML Web Services在下一代企业分布式计算中的地位,.NET平台直接在IL中间语言中内置了XML,SOAP、UDDI、WSDL等底层协议被构建成了面向开发人员的组件;而Java是通过API集来支持Web服务。虽然这种局面的形成可能仅仅是因为时间问题,但从技术角度来将,C#无疑比Java更新,究竟C#出现在Java之后。
当然“语言选择乃艺术而非技术问题”,开发人员选择哪种编程语言往往会受到众多因素的影响。各自的后端平台(C# for .NET, Java for J2EE)、编程框架的支持、各种语言相关工具的实现、现有的系统基础等都会对编程语言的发展产生相当的影响。