<From C++ To C#> 那就开始吧
说了那么多道理,我们写一个程序看看。
先熟悉一下开发环境。这次我们就用VS2010。
新建一个控制台项目。VS帮我们生成了这么一段代码。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace test1 { class Program { static void Main(string[] args) { } } } 这段代码似曾相识。它先用using引用了几个命名空间。我们在C++的时候经常使用的是using namespace std; 这里using还是using,namespace这个关键字被省略了。命名空间也变得更规范更有层次了。
接下来是namespace test1{}。这个跟C++中一致,就是给下面的代码设定一个命名空间叫做test1。我们发现C#对命名空间的要求更为强制了。
再往后,定义了一个类叫做Program。class Program{}。类的声明依旧没变。只不过原来我们都把类声明在.h文件中。而在C#里面完全没有了.h文件的踪影,也就是说没有了声明和定义之分,我们只要把自己想要的内容写在.cs文件中,如何关联这个问题完全交给编译器去处理。也正因此,再也看不到顶着一长串#include的代码了。
最后,有一个main函数。static void Main(string[] args){}。看来在C#中程序的入口还是Main函数。不过还是略微有些差别。很重要的一点,是Main函数现在是属于某个具体类的函数,而不是全局函数了。C#中不存在任何全局变量或全局函数,Main函数也不能例外。不过有些聪明的同学会想到,既然Main函数成为了类的成员函数,一段程序里可以有多个类,岂不是可以有多个Main函数了?确实如此。你可以写很多个Main函数,不过在编译的时候,你可以指定某一个具体的Main函数才是真正的程序入口。
至于其他的么,我们再来对比一下。
void main(int argc,char *argv[])
static void Main(string[] args)
Main函数变成静态函数了,而且M是大写的,参数也由原来的2个变成了一个。这些仔细想一下都很好理解。main函数是程序的入口,所以我们不可能先创建了某个类的实例,再调用实例的main函数。因此main函数理所应当是static的。至于大写,应该是摒除了原来C的遗留风格,保持C#命名规范的统一。原来的两个参数,第一个参数是用来说明第二个参数一共有多少个字符串,而现在用字符串数组作为参数完全可以自己来表明数组的个数。
这么看来C还是那个C,只是有一些需要大家去习惯的变化罢了。