第2章C#程序设计入门本章将介绍C#程序设计相关的基础知识。包括C#程序基本程序、编译程序以及一些基本输入/输出操作等。2C#程序设计实用教程2.1第一个控制台应用程序.NET可以实现多种应用,包括控制台应用程序、WindowsForm程序以及Web应用。首先来实现第一个最简单的C#控制台应用程序Welcome。3C#程序设计实用教程2.1.1创建程序•下面将使用VisualStudio.NET提供的项目模板来创建一个控制台应用程序(ConsoleApplication)。•这个程序将在窗口中,显示“Welcome,C#!”的信息。•(1)启动VS.NET。•(2)要创建一个C#控制台应用程序,首先选择【文件】→【新建】→【项目】命令,打开【新建项目】对话框,如图2-1所示。4C#程序设计实用教程2.1.1创建程序5C#程序设计实用教程2.1.1创建程序•(3)在该对话框中,从左边的“项目类型”列表框中选择“VisualC#”选项,然后在右边的“模板”列表框中选择“控制台应用程序”选项。在本例中,项目名称为Welcome,项目文件保存在“E:\C#”目录中,如图2-1所示。最后,单击“确定”按钮,关闭“新建项目”对话框,让VisualStudio.NET为用户自动生成代码。图2-2给出了自动生成的代码。6C#程序设计实用教程2.1.1创建程序7C#程序设计实用教程2.1.1创建程序•(4)查看“解决方案资源管理器”窗口,如图2-3所示。在文件“Program.cs”上单击右键,选择“重命名”,将其改名为“Welcome.cs”。8C#程序设计实用教程2.1.1创建程序•(5)查看主窗口,里面已有VS.NET自动生成的代码,如下所示。1.usingSystem;2.usingSystem.Collections.Generic;3.usingSystem.Text;4.5.namespaceWelcome6.{7.classWelcome8.{9.staticvoidMain(string[]args)10.{11.}12.}13.}9C#程序设计实用教程2.1.1创建程序在第9行,将“staticvoidMain(string[]args)”改为“staticvoidMain()”。在第10~11行中间,添加如下代码:Console.WriteLine(Welcome,C#!);10C#程序设计实用教程2.1.1创建程序(6)使用快捷键“Ctrl+F5”,或者菜单操作:【调试】→【开始执行】,启动程序后,结果如图2-4所示。11C#程序设计实用教程2.1.1创建程序•(7)查看工程文件。•在目录“E:\C#\CH2”下,将会发现文件夹“Welcome”,这是VS.NET为本工程所建立的工程文件夹。Welcome.sln:解决方案文件,后缀为“sln”,是solution缩写,双击可以打开本工程。Welcome.cs:工程代码文件,后缀为“cs”为CSharp的缩写。在子目录“bin\Debug”下,可以发现可执行文件“Ex02_1.exe”,双击可以执行。•至此,第一个控制台应用程序就完成了。12C#程序设计实用教程2.1.2编译和执行程序要编译一个C#应用程序,要从【生成】菜单中选择【生成解决方案】命令。这时,C#编译器将进行编译、链接程序,并最终生成可执行文件。13C#程序设计实用教程2.1.2编译和执行程序•当在编译过程中出现错误时,将出现如图2-5所示的【错误列表】窗口,并已经在其中列出编译过程中所遇到的每一条错误。用户可以通过双击【错误列表】窗口中的任务项直接跳转到对应的代码行。14C#程序设计实用教程2.1.2编译和执行程序•如果程序中没有错误,编译器将会生成可执行文件。•在VisualStudio中,用户可以采用两种方式运行程序:一种是调试运行,另一种是不进行调试而直接运行。要调试程序,可以通过使用【调试】|【开始】命令或工具栏的调试按钮或者直接按下F5键;要直接运行程序,则使用【调试】|【开始执行】命令或Ctrl+F5组合键。运行本例的程序,其运行结果如图2-4所示。15C#程序设计实用教程2.1.3C#程序结构分析•下面基于上述的“Welcome”项目的代码,来分析C#应用程序的结构。1、命名空间•在Welcome程序中的第一条语句usingSystem语句表示导入System命名空间。•程序Welcome里Console.WriteLine(“Welcome,C#!”)这条语句中的Console是System命名空间中包含的系统类库中已定义好的一个类,它代表系统控制台,即字符界面的输入和输出。16C#程序设计实用教程2.1.3C#程序结构分析•C#程序是用命名空间来组织代码,要访问某个命名空间中的类或对象,必须用如下语法:命名空间.类名•由于Console类位于System命名空间中,所以实际上用户在访问Console类时,完整的写法是:System.Console17C#程序设计实用教程2.1.3C#程序结构分析•但是,在程序的第一行,使用了:usingSystem;•这条语句用using语句导入System命名空间,这样在本程序中可以直接使用System命名空间中的类或对象,所以要访问Console类,就可以不用写为System.Console,直接写为Console即可。18C#程序设计实用教程2.1.3C#程序结构分析2.类•C#要求其程序中的每一个元素都要属于一个类。•程序Welcome的第二行classWelcome声明一个类,类的名字为Welcome。这个程序的功能就是依靠它来完成的。•C#程序由大括号“{”和“}”构成,程序中每一对大括号“{}”构成一个块。大括号成对出现。19C#程序设计实用教程2.1.3C#程序结构分析3.Main()方法•程序的入口从下面的代码开始:staticvoidMain()•这行代码所定义的其实是在类Welcome的一个静态方法。•C#规定,名字为Main()的静态方法就是程序的入口。当程序执行时,就直接调用这个方法。这个方法包含一对大括号“{”和“}”,在这两个括号间的语句就是该方法所包含的可执行语句,也就是该方法所要执行的功能。•本例中该方法要执行的功能就是输出“Welcome,C#!”字符串,方法的执行从左括号“{”开始,到右括号“}”结束。20C#程序设计实用教程2.1.3C#程序结构分析•从上面的程序中还可以看出,Main()方法的所有部分都是包含在另一对大括号中的,这是类Welcome所带的一对大括号,该大括号中所有部分都是Welcome类的成员。•在C#程序中,程序的执行总是从Main()方法开始的。一个C#程序中不允许出现两个或两个以上Main()方法,而且在C#中Main()方法必须包含在一个类中。21C#程序设计实用教程2.1.3C#程序结构分析4.注释•在程序编写过程中常常要对程序中比较重要或需要注意的地方加以说明,但这些说明又不能参与程序的执行。•通常是采用注释的方式将这些说明加入到程序中。•合理的注释非但不会浪费编写程序的时间,反而能让程序更加清晰,这也是具有良好编程习惯的表现之一。22C#程序设计实用教程2.1.3C#程序结构分析•在C#语言中,提供了两种注释方法:(1)每一行中“//”后面的内容作为注释内容,该方式只对本行生效。(2)需要多行注释的时候,在第一行之前使用“/*”,在最后一行之后使用“*/”,即被“/*”与“*/”所包含的内容都作为注释内容。23C#程序设计实用教程2.1.3C#程序结构分析•通过以上的分析,可知C#程序的基本结构如下://导入.NET系统类库提供的命名空间usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceWelcome{classWelcome//定义类{staticvoidMain()/*程序的入口。其中static表示Main()方法是一个静态方法,void表示该方法没有返回值*/{//输出“Welcome,C#!”Console.WriteLine(Welcome,C#!);}}}24C#程序设计实用教程System包含用于定义常用值和引用数据类型、事件和事件处理程序、接口、属性和处理异常的基础类和基类。其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管。System.Collections包含定义各种对象集合(如列表、队列、位数组、哈希表和字典)的接口和类。System.Collections.Generic包含定义泛型集合的接口和类;泛型集合允许用户创建强类型的集合,这种集合在类型安全和性能上均优于非泛型强类型集合System.Text包含表示ASCII、Unicode、UTF-7和UTF-8字符编码的类;用于在字符块和字节块之间相互转换的抽象基类2.2输入/输出操作•一般情况下,数据输入的方式有两种:从控制台输入,或者从文件中输入;数据的输出也有两种情况:可以输出到控制台,也可以输出到文件中。•控制台(console)的输入/输出主要通过命名空间System中的类Console来实现,它提供了从控制台读写字符的基本功能。控制台输入主要通过Console类的Read方法和ReadLine方法来实现的,控制台输出主要通过Console类的Write和WriteLine方法来实现的。25C#程序设计实用教程2.2.1Console.WriteLine()方法•WriteLine()方法的作用是将信息输出到控制台,但是WriteLine方法在输出信息的后面添加一个回车换行符,用来产生一个新行。•在WriteLine()方法中,可以采用“{N[,M][:格式化字符串]}”的形式来格式化输出字符串,其中的参数含义如下:26C#程序设计实用教程2.2.1Console.WriteLine()方法花括号(“{}”)用来在输出字符串中插入变量。N表示输出变量的序号,从0开始,如当N为0时,则对应输出第1个变量的值,当N为4时,则对应输出第5个变量,依次类推。[,M][:格式化字符串]是可选项,其中M表示输出的变量所占的字符个数,当这个变量的值为负数时,输出的变量按照左对齐方式排列;如果这个变量的值为正数的时候,输出的变量按照右对齐方式排列。27C#程序设计实用教程2.2.1Console.WriteLine()方法[:格式化字符串]也是可选项,因为在向控制台输出时,常常需要指定输出字符串的格式。通过使用数字格式化字符串,可以使用Xn的形式来指定输出字符串的格式,其中X指定数字的格式,n指定数字的精度,即有效数字的位数。28C#程序设计实用教程2.2.1Console.WriteLine()方法•这里提供8个常用的格式字符。1.货币格式货币格式C或者c的作用是将数据转换成货币格式,在格式字符C或者c后面的数字表示转换后的货币格式数据的小数位数。例如:doublek=1234.789;Console.WriteLine(“{0,8:c}”,k);//结果是¥1234.79Console.WriteLine(“{0,10:c4}”,k);//结果是¥1234.789029C#程序设计实用教程2.2.1Console.WriteLine()方法2.整数数据类型格式格式字符D或者d的作用是将数据转换成整数类型格式,在格式字符D或者d后面的数字表示转换后的整数类型数据的位数。这个数字通常是正数,如果这个数字大于整数数据的位数,则格式数据将在首位前以0补齐,如果这个数字小于整数数据的位数,则显示所有的整数位数。例如:intk=1234;Console.WriteLine(“{0:D}”,k);//结果是1234Console.WriteLine(“{0:d3}”,k);//结果是1234Co