



一个C#程序的“组成元素”大体可以分为命名空间、类、方法、标识符、关键字和语句等,以【例3.1】的“HelloWord”程序为例,让我们来初步认识C#程序的大体结构,如图3.3所示。
图3.3 C#程序大体结构图
C#程序是利用命名空间组织起来的。命名空间用做程序的“内部”组织系统,也用做向“外部”公开的组织系统(即一种向其他程序公开自己拥有的程序元素的方法)。定义命名空间使用namespace关键字(关键字请参考3.2.4小节),定义命名空间的语法格式如下:
namespace 命名空间名
C#程序的大部分元素(如类或方法)被放置在命名空间内部,例如,使用namespace关键字定义一个名称为“NiceDay”的命名空间,如图3.4所示。
图3.4 定义NiceDay命名空间
如果要调用某个命名空间中的程序元素(如类或者方法),首先需要使用using指令引入命名空间,然后using指令会将该命名空间内的类型成员导入到当前编译单元中,从而可以直接使用每个被导入类型的标识符,而不必加上它们的完全限定名(即命名空间的名字)。
一个C#程序由一个或多个编译单元组成,每个编译单元都用一个单独的源文件(即类文件)来保存,在编译C#程序时,将这些编译单元一起进行处理。因此,这些编译单元间可以相依赖,甚至以循环方式相互依赖。
using指令的基本形式为:
using 命名空间名;
C#中的各命名空间就好像是一个存储了不同类型的仓库,而using指令就好比是一个钥匙,命名空间的名称就好比仓库的名称,可以通过钥匙打开指定名称的仓库,从而在仓库中获取所需的物品,这个物品就是程序元素(如类或方法)。
【例3.2】 创建一一个控制台应用程序,在其主程序文件Program.cs中建立一一个命名空间N1,在命名空间N1中自定义一一个类A,在项目中使用using指令引入命名空间N1,然后在命名空间UseNameSpace中便可以实例化命名空间N1中的类,然后调用此类中的Myls方法。代码如下:
单击工具栏中的
按钮或按
【F5】
键(也可按
【Ctrl+F5】
组合键)编译并运行程序,运行结果如图3.5所示。
图3.5 运行结果
类是一种数据结构,它可以封装数据成员、函数成员和其他类。类是创建对象的模板。C#中所有的语句都必须位于类内。因此,类是C#语言的核心和基本构成模块。C#支持自定义类,使用C#编程就是编写自己的类来描述实际需要解决的问题。
类就好比医院的各个部门,如内科、骨科、泌尿科、眼科等,在各科室中都有自已的工作方法,相当于在类中定义的变量、方法等。如果要救治车祸重伤的病人,仅有一个部门是不行的,可能要内科、骨科、脑科等多个部门一起治疗才行,这时可以让这几个部门临时组成一个小组,各部门间相互配合,对病人进行治疗。这个小组就相当于定义的多个类,各类之间存在相互的访问关系,通过使用这些类就可以完成一定的功能。
使用任何新的类之前都必须声明它,一个类一旦被声明,就可以当做一种新的类型来使用,在C#中通过使用class关键字来声明类。声明形式如下:
在C#中,类名是一种标识符(详见3.2.4小节),必须符合标识符的命名规则。类名要能够体现类的含义和用途。类名一般采用第一个字母大写的名词,也可以采用多个词构成的组合词。例如,定义一个名称为Book的类,如图3.6所示。
图3.6 定义一个名称为Book的类
在Book类的类体中,定义了类的两个成员。其中,成员strName用来描述图书的名称;成员intPage用来描述图书的页码数。
Main方法是程序的入口点,C#程序中必须包含一个Main方法,在该方法中可以创建对象和调用其他方法,一个C#程序中只能有一个Main方法,并且在C#中所有的Main方法都必须是静态的。C#是一种面向对象的编程语言,即使是程序的启动入口点(Main方法),它也是一个类的成员。由于程序启动时还没有创建类的对象,因此,必须将入口点Main方法定义为静态方法,使它可以不依赖于类的对象而执行。
比如,在创建控制台应用程序时,打开Program.cs文件,在应用程序默认类Program中会看到如图3.7所示的Main入口方法。
图3.7 Main方法
Main方法就相当于汽车的电瓶,在生产汽车时,将各个零件进行组装,相当于程序的编写;当汽车组装完成后,就要检测汽车是否可用,如果想启动汽车,就必须通过电瓶来启动汽车的各个部件,如发动机、车灯等,电瓶就相当于启动汽车的入口点。
可以用3个修饰符修饰Main方法,分别是public、static和void。
public:说明Main方法是共有的,在类的外面也可以调用整个方法。
static:说明方法是一个静态方法,即这个方法属于类的本身而不是这个类的特定对象。调用静态方法不能使用类的实例化对象,必须直接使用类名来调用。
void:此修饰符说明方法无返回值。
标识符是指在程序中用来表示事物的单词,它相当于给人起的名字,用来代表某个人,如Tom、Jones等。同样,在编写程序时,对于变量、常量、方法、类等程序元素也要有名字,这就是标识符。例如,在“Hello World!”程序中的Console就是标识符,如图3.8所示。
图3.8 标识符
标识符在命名时最好具有一定的含义,例如,System命名空间中的类Console(译为控制台),以及Console类的方法WriteLine(译为输出一行)都是标识符。
另外,给标识符命名要有一定的规则,就像中国人的姓名一样,比如,姓名的头一个字表示姓氏,后面的字表示名字,标识符的命名有以下规则:
标识符只能由数字、字母和下画线组成。
标识符必须以字母或者下画线开头。
标识符不能是关键字。
例如,下面定义的类名就是错误的,因为第一个和第二个类名称不符合标识符的基本要求,而第三个类名称“static”是表示静态概念的关键字(static常用来修饰方法或类),所以都不可以作为类名。
而下面定义的两个类名称都是正确的:
所谓关键字是指在C#语言中具有特殊意义的单词,它们被C#设定为保留字,不能随意使用。关键字就相当于商品的国家认证标志,如中国名牌认证标志、国家免检产品认证标志、绿色食品认证标志等,商品或商品的包装一旦被印有某种国家认证标志,那么该商品就具有了相应的特性或者特殊含义。
例如,在“Hello World!”程序中的static、void和string都是关键字,如图3.9所示。
图3.9 关键字
学习手册
注意
在对类、变量、方法等程序元素定义名称时,不要与关键字重名,否则程手册序无法编译运行。
语句是构造所有C# 程序的基本单位。语句可以声明局部变量或常数、调用方法、创建对象或将值赋给变量、属性或字段,语句通常以分号终止。
【例3.3】 下面的代码就是一一条语句:
Console.WriteLine("Hello World!");
此语句便是调用Console类中的WriteLine方法,输出指定的字符串“Hello World!”。
代码注释的主要功能是对某行或某段代码进行说明,以方便对代码的理解与维护,编译器在编译程序时不执行注释的代码或文字。代码注释就好比超市中各商品的下面都附有价格标签,对商品的价格进行说明。注释可以分为行注释和块注释两种,行注释都以“//”开头。
【例3.4】 在“Hellllo Worlld!”程序中使用行注释,代码如下:
如果注释的行数较少,一般使用行注释。对于连续多行的大段注释,则使用块注释,块注释通常以“/*”开始,以“*/”结束,注释的内容放在它们之间。
【例3.5】 在“Hellllo Worlld!”程序中使用块注释,代码如下:
/*程序的Main方法中可以输出“Hello World!”字符串
学习手册
注意
注释可以出现在代码的任意位置,但是不能分隔关键字和标识符。