1.7 应用程序结构
学习了编译和运行C#控制台应用程序之后,下面将对应用程序结构做简要的介绍。
1.7.1 控制台应用程序文件夹结构
以上一例子来说,在建立项目时,Visual Studio已经在“F:\项目\练习小程序\C#\”文件夹下创建了一个与ConsoleHelloWorld项目同名的文件,此文件夹被叫作解决方案文件夹,解决方案和项目都是Visual Studio提供的有效管理应用程序的容器,一个解决方案可以包含一个或多个项目。在ConsoleHelloWorld文件夹下有一个名为ConsoleHelloWorld.sln的文件,此文件为Visual Studio的解决方案文件,还有一个与解决方案同名的文件夹,此文件夹为项目文件夹。在项目文件夹中包含比较重要的文件夹——bin文件夹,此文件夹下用于存放Visual Studio编译后生成的可执行文件等。此外,还有一个名为Program.cs的文件,该文件是项目的入口文件(启动文件),该文件中定义了项目的启动入口(Main()方法),在C#中程序的源文件以.cs作为扩展名。
Visual Studio提供了一个叫“解决方案资源管理器”的窗口,在这里可以管理解决方案中包含的所有文件。如图1-19所示,单击解决方案资源管理器中的“显示所有文件”按钮,就可以看到解决方案下的程序结构了。
图1-19 解决方案资源管理器
1.7.2 C#程序结构
C#程序结构大致可分为注释、命名空间、类、Main方法等。还以上述例子来说,下面就由外向内分析上述代码。
1.using关键字与namespace关键字
C#中using关键字用来引入其他命名空间,它的作用与Java中的import类似。最上面5条using语句在模板生成时Visual Studio就已经自动添加了。
C#程序中组织代码是用namespace(命名空间)的形式来实现的,通过命名空间来分类,以区别不同的代码功能,同时也是VS.NET中所有类的完全名称的一部分。如果要调用某个命名空间中的类或方法,首页需要使用using指令引入相应的命名空间,从而可以直接使用每个被导入的类型的标识符,而不必加上它们的完全限定名。
2.class关键字
class关键字表示类,类是一种数据结构,C#中所有的语句都必须位于类内。所以,类是C#语言的核心和基本构成模块。类要包含在一个命名空间中,在创建项目时Visual Studio自动创建了一个名为Program的类。在Main方法中使用的Console类表示控制台应用程序的标准输入流、输出流和错误流。此类不能被继承。它的属性、方法与事件如表1-1所示。
表1-1 Console类的属性、方法与事件
续表
续表
续表
3.Main方法
Main方法是程序的入口方法,C#控制台程序中必须包含且只能包含一个Main方法,并且Main方法必须为静态方法(即必须使用static修饰符),C#是面向对象的编程语言,静态方法可以不依赖于类的实例对象而执行,这样才能在程序启动还没有创建类的对象时被执行了。在该方法中可以创建对象和调用其他方法等。
Main方法有如下4种形式。
static void Main (string[] args){} static int Main (string[] args){} static void Main (){} static int Main (){}
可以根据自己的需要进行选择使用。
4.注释
注释是用来对某行或某段代码进行说明,方便日后对代码的维护。编译器编译程序时不执行注释的代码和文字。由于软件的复杂性以及不可预知性,所以在程序当中添加注释是一个非常明智的选择,尤其是在团队开发当中,可以使自己的程序更加适于阅读。
C#中注释分为如下三种。
(1)单选注释:使用“//”进行注释,只可注释一行。
(2)多行注释:以“/*”开始,“*/”为结束,中间部分为要注释的内容。
(3)文档注释:使用“///”进行注释,此注释在类或方法前面,连续输入三个“/”,用于对类和方法进行注释。
为上例代码添加注释,添加注释后的代码如下。
/* 此程序演示了使用Console输出Hello World!字符串 此程序的重点在于Console类的使用 */ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleHelloWorld { class Program { /// <summary> /// 我是程序的入口方法 /// </summary> /// <param name="args"></param> static void Main(string[] args) { Console.WriteLine("Hello World!"); //输出Hello World! Console.ReadLine(); } } }
运行效果与未添加注释时效果相同。