在本文开始写作的时候,虽然商用C# 编译器尚未推出, 但你可以下载微软的.NET Frameworks SDK Beta 1.
本节课通过介绍几个简单的程序,使得你对C#有所入门。本节程要达到如下几个目的:
1.理解一个C#程序的基本结构。
2.初步了解"名称空间"的概念。
3.初步了解"类"的概念。
4.了解"Main"方法所做的工作。
5.学会如何读取命令行输入信息。
6.学会使用控制台输入/输出 (I/O)语句。
1.**1-1. 一个简单的欢迎程序Welcome.cs
1.**1-1. 一个简单的欢迎程序Welcome.cs |
// Namespace Declaration using System; // Program start class class WelcomeCSS { // Main begins program execution. public static void Main() { // Write to console Console.WriteLine("Welcome to the C# Station Tutorial!"); } } |
1.**1-1中的程序包括四个基本元素:名称空间的声明,类,"Main"方法和语句。
2.本例中对名称空间的声明,表明正在使用"System"这个名称空间。
名称空间内包含了一组可以被C#程序调用的代码。有了"using System;"这个声明,就表明程序可以引用该"System"名称空间内的代码,而无需在每个引用的前面加上"System"。关于这一点,我将在后面专门介绍名称空间的课程中详细介绍。
3.类"class WelcomeCSS"包含了程序所要用到的数据,和所要执行的方法的定义。
同诸如接口和结构这样的元素类似,类在程序中是用来描述对象的,这些元素都将会在后续课程中详细介绍。本例中的类不包含数据,只包含一个方法。该方法定义了该类的行为(或者称为该类所能做的事情)。
4.程序运行时,WelcomeCSS类中的该方法表明了该类所要完成的事情。
方法名"Main"作为保留字,作为程序的起点。"Main"前面是个名为"static"的修饰符。"static"修饰符表明该方法仅仅在该特定的类中工作,而不是在在该类的实例中工作。这是必需的,因为一旦程序启动后,并不存在对象的实例。类,对象和实例的具体用法将会在后面的课程中覆盖到。每个方法必须有个返回值类型。本例中,返回值类型是"void",它表明"Main"函数没有返回值。每个方法名的后面也都跟着个参数表,参数表包含有零个或者多个参数并用括号括起来。为了简单起见,没有在"Main"后面添加参数。后面的课程中,将介绍"Main"方法所允许采用的参数类型。
5."Main"方法通过"Console.WriteLine(...)" 语句表明其行为。
"Console" 是"System" 名称空间中的类。"WriteLine(...)"是"Console" 类中的方法。我们使用"."这个句点操作符来标记程序中的从属元素。注意到,我们也可以这样来书写:"System.Console.WriteLine(...)",这样的书写格式是很有趣的,它是根据"namespace.class.method" 的格式进行书写的。如果在程序的一开始,没有采用"using System"的声明,那么就必须严格遵守"System.Console.WriteLine(...)"这样的书写格式。该语句的执行结果是在控制台控制台上输出字符串"Welcome to the C# Station Tutorial!" 。
6.注释是由"//"标出的。
例子中的这些注释都是单行注释,表明从该注释符号的开始处到该行结束处,都是注释部分。如果你的注释要跨越若干行,即多行注释,可以以符号"/*"开始,以符号"*/"结束,其中所包含的全部是注释。你也可以在多行注释符号中包含单行注释。但是,不能在单行注释符号后面放上多行注释符号。程序编译时,将忽略掉注释部分。注释的目的是为了用简单的英语给程序所要完成的工作加上注解。
7.所有语句都以分号";"结束。
类和方法以"{"开始,以"}"结束。任何位于"{"和"}"之间的语句定义为块。块定义了程序元素的活动范围 (或者称为生命期和可见性),这些概念将在后面的课程中加以介绍。
8.可以编写出能够接受命令行输入信息的程序。
命令行输入信息的集合是在"Main"方法中进行处理的。**1-2中的程序,可以从命令行中接受输入一个名字,之后在控制台上显示出来。
2.**1-2. 读取命令行输入信息的程序NamedWelcome.cs |
// Namespace Declaration using System; // Program start class class NamedWelcome { // Main begins program execution. public static void Main(string[] args) { // Write to console Console.WriteLine("Hello, {0}!", args[0]); Console.WriteLine("Welcome to the C# Station Tutorial!"); } } |
1.记住,要把你的名字添加到命令行中。
例如,在命令行中打入"NamedWelcome Joe"。如果不这样做,程序就会崩溃,在后面的课程中,将介绍如何检测这种情况,以及如何避免这种情况的出现。
2.在**1-2中,在"Main"方法的参数表中有个入口。
参数名是"args"。 在程序的后面部分就要引用该参数。"string[]"是参数"args"的类型。"string"类型用于存放字符。这些字符可以是一个单词,也可以是多个单词。方括号"[]"表示数组,"args"参数由命令行上的若干个单词构成。
3.在"Main"方法的语句中,多了一条"Console.WriteLine(...)"语句。
该语句中的参数表同以往的写法不同,其中有个格式字符串"{0}" 参数。 格式串中的第一个参数从数字0开始,第二个参数从数字1开始,依此类推。 "{0}" 参数意味着引号后面的参数值将会输出到该位置。现在让我们来看看引号后面的参数。
4."args[0]"参数,它指向"args"数组中的第一个字符串。
数组中的第一个元素是args[0], 第二个元素是args[1],依此类推。例如,如果我在命令行中写上"NamedWelcome Joe","args[0]"的值就为"Joe".
让我们回到在格式字符串中嵌入的"{0}" 参数吧,因为"args[0]"是格式串后面的第一个参数, 一旦执行该命令时,"args[0]"的值"Joe"就会替换掉格式串中的"{0}"。一旦执行命令:"NamedWelcome Joe",输出结果就会为:
>Hello, Joe! >Welcome to the C# Station Tutorial! |
通过控制台也可以把输入信息提供给程序。**1-3演示了交互式处理用户输入的信息的方法。
3.**1-3. 交互式处理输入信息的程序 InteractiveWelcome.cs |
// Namespace Declaration using System; // Program start class class NamedWelcome { // Main begins program execution. public static void Main() { // Write to console/get input Console.Write("What is your name?: "); Console.Write("Hello, {0}! ", Console.ReadLine()); Console.WriteLine("Welcome to the C# Station Tutorial!"); } } |
这一次,"Main"方法没有用到任何参数,但现在程序中有了三条语句,前面两条语句不同于第三条语句,它们是:"Console.Write(...)"而不是 "Console.WriteLine(...)"。区别是:"Console.Write(...)"语句把信息输出到控制台,之后光标停留在同一行,而"Console.WriteLine(...)"把信息输出,之后换行。
第一条语句仅仅输出"What is your name?: "到控制台。
第二条语句要等到其参数被适当地处理之后,才会输出信息。 格式串后面的第一个参数是:"Console.ReadLine()"。这就使得程序要等待用户在控制台输入信息,输入信息以回车或者换行结束。该方法的返回值替换了格式串中的"{0}"参数,并输出到控制台上。
最后一个语句也用来输出信息到控制台,这一点我们在前面已经介绍过。一旦运行了程序"InteractiveWelcome",其输出结果为:
>What is your Name?
>Hello, ! Welcome to the C# Station Tutorial!
小结
到现在为止,你已经了解了C#程序的基本结构,名称空间和类。你还了解到"Main"方法是C# 程序的入口,并学会了如何捕捉命令行的输入信息,以及如何进行交互式的I/O操作。