这份FAQ将力图解答C++开发者第一次接触C#时可能遇到的基本问题。在阅读本FAQ之前,我推荐你先阅读《.NET框架FAQ》。如果你对于本FAQ有任何意见、建议、批评或者指正,请给我e-mail:andy@andymcm.com。请注意:本FAQ的内容仅仅是我对众多信息的阐述,这些信息的来源包括DOTNET邮件列表、微软公司的文档、以及使用C#语言的实际经验。我不保证本FAQ中解答的正确性,也不保证今后不修改其中的解答。 1. 简介 1.1 什么是C#? C#是由微软(Microsoft)公司设计的一种程序设计语言。C#的语法大致是基于C/C++的,并且与Java有着惊人的相似性。微软对C#的描述如下:“C#是一种简单、现代化、面向对象并且类型安全的程序设计语言,它从C和C++衍生而来。C#(读作‘C sharp’)紧密地植根于C和C++的基础之上,因此C和C++程序员将可以立刻熟悉它。C#的设计意图是要将Visual Basic的高生产率和C++直接访问机器的强大能力结合起来。” 1.2 如何开发C#应用程序? 免费发布的.NET SDK中包括了C#命令行编译器(csc.exe)。另外,Visual Studio .NET也完全集成了对C#开发的支持。 1.3 在哪里可以下载.NET SDK和Visual Studio .NET? 你可以在http://msdn.microsoft.com/net下载.NET SDK。如果你订阅了MSDN宇宙版,那么你还可以下载Visual Studio .NET。 1.4 C#会取代Java吗? C#与Java非常相似——在与C++的比较中,这两种语言表现出了类似的优势和不足。例如,这两种语言都有垃圾收集,但都没有模板。微软已经停止了Visual J++的生产,因此很难不把C#看成微软制造的Java替代品。1.5 C#会取代C++吗? 答案很明显:不会。不过,在.NET环境中,C++也很难成为最佳的选择。为了让.NET运行时环境充分发挥它的威力,编程语言需要符合某些规则,其中一条重要的规则就是:语言的类型系统必须符合公共类型系统(CTS)的规定。不巧许多C++特性都不被CTS支持,例如多继承和模板等等,这使得C++注定不是.NET开发的首选语言。 对于这个问题,微软的回答是:他们提供了C++的受控扩展(ME),使程序员可以编写符合CTS要求的C++代码。他们提供了一些新的关键字,使程序员可以用CTS属性给C++类做上标记(例如用“__gc”标记表示垃圾收集)。但是,我也并不认为程序员会优先选择ME C++来进行新项目的开发,因为他们完全可以选择C#。从语法的角度来说,C#和C++非常相似;但是和C++不同,C#的设计思想就是要与.NET环境无缝结合,并充分利用.NET框架的功能。因此,ME C++存在的唯一理由就是:人们需要借助它来将现存的C++代码移植到.NET环境中来。 因此,作为对这个问题的回答,我猜测C++在.NET环境之外将继续作为一个重要的语言而存在,并将被用于将现存C++代码移植到.NET环境中。但是,当C++开发者要从头开发.NET应用程序时,我认为他们将选择C#。不过,时间将证明一切。 1.6 一个简单的C#程序像什么样子? 唉,我实在应该为我极度匮乏的想象力而向读者道歉。没错,你猜对了,下面就是著名的“Hello, World”……
class CApplication
{
public static void Main()
{
System.Console.Write( "Hello, new .NET world." );
}
}
(你不能把Main函数作为全局函数——C#中根本没有全局函数这种东西。) 1.7 C#是面向对象的吗? 是的,跟Java和C++一样,C#也是一种面向对象的语言。 1.8 C#有它自己的类库吗? 是