设为首页 加入收藏

TOP

1.2 C#程序示例
2013-10-07 14:04:00 来源: 作者: 【 】 浏览:54
Tags:1.2 程序 示例

1.2 C#程序示例

我们来进一步看看一个简单的C#程序。首先看一下大家都喜闻乐见的"Hello World!"程序。用C#编写的控制台版本是这个样子的:

 

注意这个C#程序的结构。它声明了一个类型(名为EntryPoint的类)和类的一个成员(名为Main的方法)。这和C++(www.cppentry.com)不同,C++(www.cppentry.com)是在头文件里面定义类型,然后在一个单独的编译单元里定义它,通常采用一个.cpp之类的文件名。另外,元数据(元数据描述了模块里面的所有类型,并由C#编译器透明生成)使C++(www.cppentry.com)里面的前置声明和包含(inclusion)不再需要。实际上,C#中甚至不存在前置声明。

C++(www.cppentry.com)程序员会发现静态的Main方法比较熟悉,只是名字的首字母变成了大写。所有的程序都需要一个入口点,对C#而言就是静态Main方法。当然还有更多的区别,例如,Main方法在类里面声明(在这个例子中,是名为Entry Point的类)。在C#里,所有的方法都必须在类型定义里面声明,而没有C++(www.cppentry.com)里面的静态、自由函数。Main方法的返回值可以是int或void,这个取决于你的需要。在这个例子中,Main没有参数,但如果需要访问命令行参数,Main方法可以声明一个参数(一个字符串数组)来访问它们。

注解 如果应用程序包含多个含静态Main方法的类型,则可以通过/main编译开关来选择用哪一个。

你可能注意到WriteLine调用看起来比较繁琐。必须用类名Console来限定这个方法的名字,还必须指定Console类所在的命名空间(这里是System)。.NET(C#也一样)支持命名空间来避免巨大的全局命名空间内名字的冲突。当然,全限定名(fully qualified name),包括命名空间,是不必每次输入的,C#提供了using指令来解决这个问题。using与Java里的import和C++(www.cppentry.com)里的using namespace类似。因此可以对上面的程序稍加修改,得到代码清单1-1。

代码清单1-1 hello_world.cs

 

有了using System;指令,可以在调用Console.WriteLine的时候省略System命名空间。

可以在一个Windows 命令行窗口执行下面的命令来编译这个例子:

 

我们来仔细看看这个命令行做了什么。

csc.exe是Microsoft的C#编译器。

/r选项指定了这个程序的程序集依赖。程序集在概念上和本地代码中的DLL类似。mscorlib. dll里面定义了System.Console对象。现实中,不必引用mscorlib,因为编译器会自动引用它,除非用了/nostdlib选项。

/target:exe选项告诉编译器你在编译一个命令行应用程序,这是不指定时的默认值。其他的选项包括用来编译Windows GUI应用的/target:winexe,用来生成带.dll后缀的DLL程序集的/target:library,用来生成带.netmodule后缀的DLL的/target:module。/target:module生成的模块不包含任何程序集清单(manifest),因此之后必须用程序集链接器al.exe把它引入一个程序集,这为创建多文件的程序集提供了一种方法。

hello_world.cs是正在编译的C#程序。如果项目中有多个C#文件,可以在命令行的末尾把它们全部列上。

执行这个命令行后,产生了hello_world.exe,可以通过命令行来执行它,并查看预期的结果。如果愿意,还可以用/debug选项来重新编译这份代码,这样你可以在调试器里面单步跟踪执行过程。为了体验C#平台独立的特性,如果正好有一个安装有Mono VES的Linux操作系统,你可以把hello_ world.exe以二进制方式直接复制到上面,如果Linux一切设置正确,将可以看到程序按预期的方式运行。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.1.3 CLR垃圾回收 下一篇实例002 如何创建基于文档视图的M..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: