《C#程序设计基础教程》课件第1章_第1页
《C#程序设计基础教程》课件第1章_第2页
《C#程序设计基础教程》课件第1章_第3页
《C#程序设计基础教程》课件第1章_第4页
《C#程序设计基础教程》课件第1章_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章基本语法(一)1.1.NET1.2VisualStudio20101.3简单的C#程序1.4加法运算器1.5计算器

1.1.NET

2000年6月,微软公司推出了.NET平台,这是一个让人印象深刻的平台,它用一种全新的思想将Internet和万维网(WorldWideWeb,WWW)集成到了软件开发、工程发布和使用中。它有着优秀的语言兼容性,这使得开发人员可以使用多种不同的开发语言(C#、VB.NET、C++、F#等)来开发应用程序。1.1.1.NET框架.NET框架(.NETFramework)是所有.NET程序运行所必需的,这个框架也是微软整个.NET战略的核心。.NET框架是一个采用系统虚拟机的方式运行的编程平台,它包含了许多有助于互联网和内部网应用迅捷开发的技术,在通用语言运行库的基础上,支持多种语言的开发。.NET框架旨在实现以下目标:(1)提供一个一致的面向对象的编程环境。(2)提供一个将软件部署和版本控制冲突最小化的代码执行环境。(3)提供一个代码执行环境。(4)提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。(5)使开发人员的经验在面对类型大不相同的应用程序时保持一致。(6)按照工业标准生成所有通信,以确保基于.NET框架的代码可与任何其他代码集成。1.1.2CLR.NET框架的核心是其运行库执行环境,称为通用语言运行库(CLR)或.NET运行库。CLR提供了一个可靠而完善的多语言运行环境,简化了应用程序的开发配置和管理,从而使组件能在多语言环境下跨平台工作。通常将在CLR控制下运行的代码称为托管代码(ManagedCode)。但是,在CLR执行编写好的源代码之前,需要编译它们。在.NET中,编译分为两个阶段:(1)将源代码编译为Microsoft中间语言(MicrosoftIntermediateLanguage,MSIL)。(2) CLR将MSIL编译为平台专用的代码。1.1.3MSDNMSDN技术资源库是微软公司为软件和网站开发人员提供的技术资源库,是使用微软技术开发软件或应用程序时必定会参访的地方,同时它也提供了订阅的服务,由微软不定时供应最新的软件及技术文件。MSDN技术资源库的在线版本在微软的MSDN网站上可以访问,而基于物理介质的离线版本则可以通过MSDN订阅服务或者购买VisualStudio获得。VisualStudio支持在安装VisualStudio时,选择安装MSDN技术资源库到本地计算机,或者使用在线版本。每个MSDN技术资源库版本都支持一个或者多个VisualStudio版本,可以在VisualStudio的帮助选项中选择使用的MSDN技术资源库版本。1.1.4C#C#由安德斯· 海尔斯伯格(AndersHejlsberg)主持开发,它是一种基于.NET框架的、面向对象的高级编程语言。C#由C语言和C++派生而来,继承了其强大的性能,同时又以.NET框架类库作为基础,拥有类似VisualBasic的快速开发能力。C#的读音为CSharp,“#”读作“Sharp”,看起来像是“C++”中两个加号重叠在一起。微软借助这样的命名,表示C#在一些语言特性方面相对于C++的提升。微软希望借助这种语言来取代Java。目前C#已经成为ECMA(欧洲计算机制造联合会)和ISO(国际标准化组织)的标准规范。ECMA为C#标准列出了以下设计目标:(1) C#旨在设计成为一种“简单、现代、通用”以及面向对象的程序设计语言。(2)此种语言的实现,应提供对于以下软件工程要素的支持:强类型检查、数组维度检查、未初始化的变量引用检测、自动垃圾收集(GarbageCollection,指一种自动内存释放技术)。软件必须做到强大、持久,并具有较强的编程生产力。(3)此种语言为在分布式环境中的开发提供适用的组件开发应用。(4)为使程序员容易迁移到这种语言,源代码的可移植性十分重要,尤其是对于那些已熟悉C和C++的程序员而言。(5)对国际化的支持非常重要。(6) C#适合为独立和嵌入式的系统编写程序,从使用复杂操作系统的大型系统到特定应用的小型系统均适用。当然,相对于C和C++,C#也在以下方面进行了限制和增强:(1)指针(Pointer)只能被用于不安全模式。大多数对象访问通过安全的引用实现,以避免无效的调用,并且有许多算法用于验证溢出,指针只能用于调用值类型以及受垃圾收集控制的托管对象。(2)对象不能被显式释放,代替为当不存在被引用时通过垃圾回收器回收。(3)只允许单一继承(SingleInheritance),但是一个类可以实现多个接口(Interfaces)。(4)与C++相比,C#拥有更加安全的类型管理。默认的安全转换是隐含转换,例如由短整型转换为长整型和从派生类转换为基类。而接口布尔型与整型及枚举型与整型不允许隐含转换,非空指针(通过引用相似对象)与用户定义类型的隐含转换必须被显式地确定,不同于C++的复制构造函数。(5)数组声明语法不同。例如,语法为“int[]a=newint[5]”,而不是“inta[5]”。(6)枚举位于其所在的命名空间中。(7) C#中没有模板(Template),但是在C#2.0中引入了泛型(GenericProgramming),并且支持一些C++模板不支持的特性,比如泛型参数中的类型约束。另一方面,表达式不能像C++模板中被用于类型参数。(8)属性支持,使用类似访问成员的方式调用。(9)完整的反射支持。

1.2VisualStudio2010

MicrosoftVisualStudio(VS)是美国微软公司的开发工具套件系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具。所写的目标代码适用于微软支持的所有平台。1.2.1历史从20世纪90年代开始,微软开始持续不断地发布VS,至今已经发布了12个不同版本的VS,表1-1中列出了各个VS版本的发布时间和运行基础。1.2.2VS2010VS2010除了因为它是兼容性最好的环境之外,它还具有以下优点:(1)界面被重新设计和组织,变得更加清晰和简单,能够更好地支持多文档窗口以及浮动工具窗,并且对于多显示器的支持也有所增强。(2) .NETFrameWork4.0支持开发面向Windows7的应用程序。(3)除了MicrosoftSQLServer,它还支持DB2和Oracle数据库。(4)内置MicrosoftSilverlight开发支持。(5)支持高亮引用。图1-1是一个典型的VS2010开发环境截图,它主要包括以下几个部分:(1)菜单栏:包含所有开发、维护与执行程序的命令。(2)工具栏:包含执行菜单栏中常用命令的快捷方式。(3)工具箱:包含程序开发过程中所能够使用到的定制控件。(4)解决方案资源管理器:用于访问解决方案中的所有文件。(5)属性窗口:用于显示当前所选窗体、设计视图中的控件或文件的属性。(6)窗体设计器:用于设计和制作程序中的窗体。1.2.3创建项目所有.NET项目基本上都有对应的项目模板,我们所要做的就是根据项目的类型选择不同的模板。所以,创建.NET项目很简单,只需以下几个简单的步骤即可:(1)通过“开始”菜单启动VS2010,如图1-2所示。也可以直接将该应用程序发送至桌面,然后双击图标启动。(2)在起始页中选择“新建项目”。(3)在打开的“新建项目”对话框的左侧选择C#为开发语言,在右侧的上部选择.NETFrameWork的版本,在下面的项目模板中选择合适的模板,在对话框底部的“名称(N)”处输入项目的名称,在“位置(L)”处输入项目的保存路径,或者点击“浏览(B)…”按钮选择保存路径,其他内容保持默认,最后点击“确定”按钮完成项目创建,如图1-4所示。1.2.4控制台应用程序通过上述过程,我们就可以创建一个控制台应用程序,如图1-5所示。所有的.NET程序基本上都是由名称空间引用、名称空间声明和类三个部分组成的。1.名称空间引用命名空间提供了一种组织相关类和其他类型的方式。与文件或组件不同,命名空间是一种逻辑组合,而不是物理组合。名称空间是.NET管理应用程序的一种手段,因为在系统开发的过程中会产生大量的文件、代码甚至项目,所以我们需要一个有效的管理手段。在.NET程序开发过程中,并不需要事必躬亲,事实上微软已经完成了很多复杂的工作,微软将完成这些工作的代码通过名称空间组织起来,以方便使用,我们只需要告诉系统需要的名称空间,这个过程称为引入名称空间,其语法结构如下:using名称空间;系统定义的名称空间很多,完成不同的编程任务需要使用不同的名称空间,当然我们不可能也没有必要将所有的系统名称空间全部记下来,所以了解和熟悉常用的几个名称空间就可以了。2.名称空间声明声明名称空间的语法如下:namespace名称空间名称名称空间在命名的时候要尽可能使用易读的标识符名称,,采用Pascal命名法(首字母大写,其后每个单词的首字母大写,下同),不要使用下划线、连字符或任何其他非字母数字字符,尽管C#名称空间支持中文,但不推荐使用。3.类在C#中类是个很有趣的存在,它可以大到包含程序的全部,也可以小到只有一行代码;它可以是复杂的,也可以是简单的。对它有着严格的规范限制,但是又可以随心所欲地发挥我们的想象力去设计它。当然,现阶段我们不需要了解这么多,只需要知道如何定义和使用自己的类就可以了。定义类的语法结构如下:[访问修饰符]class类名称在前面所创建的控制台程序中,系统为我们定义了一个类:classProgram这里的类并没有访问修饰符,因为这里的程序还没有复杂到需要使用访问修饰符的程度,但在以后的学习中我们将会用到,到时再详细介绍。类的命名是需要我们注意的地方,因为不同的位置不同的程序,命名方式会有所区别,总的来说在命名的时候尽可能采用易于阅读和理解的标识符,例如对象的名称(Teacher、Book等)、操作的名称(SQLOption、BookDAL等),由字母、数字和下划线构成,不能以数字开头,不能包含空格,采用Pascal命名法,不要采用诸如AA、BB等没有任何说明意义的名称,不推荐使用中文。Main所有的应用程序都需要有一个开始的地方,计算机是一个高效率但是没有智商的工具,所以我们要明确告诉计算机从哪里开始执行我们的程序。控制台应用程序开始的地方就是Main方法。在C#中声明一个Main方法的语法如下:[访问修饰符]staticvoidMain([string[]args])或[访问修饰符]staticintMain([string[]args])需要注意的是:首先,Main方法必须是静态的,也就是需要static关键字修饰,静态方法将会在后面的章节中介绍;其次,Main方法的首字母是大写的,参数可以有也可以没有;最后,可以没有返回,也可以返回一个整型值。

1.3简单的C#程序

1.3.1简单输出打开VS2010,创建一个新的控制台应用程序,项目名称为CH01。这里我们需要对项目做一个小小的调整,默认情况下系统会在新创建的项目中添加一个默认的文件Program.cs,而我们需要让它变得更有意义一些,所以需要更改它的名字。右键单击Program.cs文件,在弹出的菜单中选择“重命名(M)”,再对文件进行重命名。也可以在解决方案资源管理器中选中Program.cs文件,在属性窗口中修改文件名。当我们完成修改后,系统会弹出一个对话框,询问我们是否需要执行对这个默认文件的所有引用的修改,这里我们选择“是(Y)”,如图1-9所示。接下来,我们需要在Main方法中输入一些代码,以完成我们的第一个C#程序:staticvoidMain(string[]args){Console.WriteLine("HelloWorld!");Console.ReadLine();}在上面的代码中,我们使用到了一个系统的类Console,它主要用来操作控制台应用程序的标准输入和输出。它有很多方法,在这里我们首先用到了其中的一个方法WriteLine(),这个方法的作用就是向控制台输出信息,我们选择的是输出一个字符串"HelloWorld!"。在这个方法的后面,我们又使用了Console类的另一个方法ReadLine(),它的作用就是从标准输入流读取一行字符,当程序执行的过程中遇到它时,程序就会停止下来等待我们输入。这里使用它的原因只是让程序执行到这里后停止下来,否则我们什么也看不到。按下键盘上的F5键,或者点击工具栏上的“运行”按钮执行我们的程序。我们的第一个C#程序就这样诞生了,其运行结果如图1-11所示。1.3.2转义在C语言中有一个专用的换行符“\n”,这个符号在C#中也可以使用,同样能够使用的还有通用制表符,例如“\r”、“\t”等。事实上,在C#中反斜杠(\)称为转义符,它可以告诉C#其后所出现的字符是字符串中的特殊字符,在字符串中出现反斜杠时,C#将反斜杠与下一个字符结合起来,构成转义序列。表1-2列出了常用的转义序列。

1.4加法运算器

1.4.1问题计算器是我们经常用到的一个小程序,下面我们就从加法入手,制作一个简单的加法运算器,运行效果如图1-13所示。通过图1-13所示的运行结果图,我们可以整理出加法运算器的一些需求:(1)需要对用户有足够的提示,谁也不会知道漆黑的屏幕上一个闪动的光标是什么意思。(2)提示和数字在一行显示。(3)需要接收用户输入的两个数字。(4)两个数字相加。(5)分别输出两个数字以及它们相加的结果。1.4.2需求分析1.输出对于上面所提出的一些需求,有些是很容易实现的,例如提示信息的输出,我们可以采用Console.Write()方法来实现: Console.Write("请输入第一个数字:");

Console.Write("请输入第二个数字:");这里也可以使用WriteLine()方法,但是提示和数字将会出现在两行里。2.输入如何接收用户的输入?我们需要学习一个新的方法:ReadLine()。这个方法也是属于Console类的,它的作用就是接收用户的输入,直到回车键结束,它会将用户的输入自动转换为一个字符串。stringname=Console.ReadLine();3.变量要想使用好ReadLine()方法,我们必须要使用变量来配合,因为这个方法只负责接收,而不负责存储,这就需要我们用别的方法来将用户的输入临时存储起来,这样才不会丢失这些值。能够作为值的容器的就是变量了。C#中定义变量的语法结构如下:[访问修饰符]数据类型变量名称[=值]访问修饰符决定了变量能够被什么人访问,默认是私有的。数据类型则告诉系统这个变量能够存放什么样的值。数据类型可以是系统的内置类型,也可以是用户自定义的类型。变量名称就是该变量的名称。变量在命名的时候需要遵循以下规范:(1)必须以字母开头。(2)只能由字母、数字和下划线组成,而不能包含空格、标点符号、运算符等其他符号。(3)不能与C#中的关键字名称相同。(4)不能与C#中的库函数名称相同。实际应用中变量的定义语法可以有很多种变体,例如: //定义一个变量,然后赋值inti;i=10;

//定义一个变量并赋值intj=10;

//定义多个变量,并赋值。注意多个变量类型必须相同intk,l=10;//定义不同类型的变量必须使用单独的语句doublepi=3.1459d;floatf=12.3f;stringname="Tom";需要注意的是,变量在使用之前必须经过初始化,也就是赋初值,否则编译器不允许在程序中使用这个变量。4.类型转换在加法运算器中,我们操作的都是整数,但是采用ReadLine()方法接收到的则是一个字符串,因此这里我们就需要对用户的输入进行类型转换。在C#中常用的类型转换方式有两种:Parse()方法和Convert类。对于Parse()方法,它的作用就是将字符串转换为指定的类型,它都是作为特定数据类型的一个方法存在的,因此它一般用于比较简单的类型转换。而Convert类则适用于更加复杂的类型转换,这个类提供了一系列的方法来帮助我们将一种类型的值转换为另外一种类型的值。1.4.3实现加法运算器在完成了所有的分析工作之后,我们就可以动手来完成加法运算器的制作了,其代码如下:staticvoidMain(string[]args){//声明变量intnum1=0,num2=0,result=0;//接收用户的输入Console.Write("请输入第一个数字:");num1=int.Parse(Console.ReadLine());Console.Write("请输入第二个数字:");num2=int.Parse(Console.ReadLine());//计算结果result=num1+num2;

//输出结果Console.WriteLine();Console.WriteLine("您输入的第一个数字是:{0};\n您输入的第二个数字是:{1};\n它们的和是:{2}。",num1,num2,result);Console.ReadLine();}在上面的代码中,我们首先声明了三个整型变量,并赋予它们初始值0。然后通过两个相同的输出和输入结构来完成提示信息的输出和用户输入的接收,这里我们用到了类型转换,将用户输入的字符串转换成为整型。最后,我们完成了一个数学运算,通过“+”运算符将两个变量相加并赋给第三个变量result。在使用一个WriteLine()方法实现换行后,我们用一个复杂的输出语句来显示最终的结果,在这条语句中我们用到了占位符“{0}”,它的作用和C语言中占位符的作用是一样的。

1.5计算器

1.5.1问题一个完整的计算器至少应该能够完成加、减、乘、除的运算,所以接下来我们将继续开发加法运算器,将其做成一个能够完成加、减、乘、除运算的简单的计算器,如图1-14所示。1.5.2需求分析1.运算符在大多数程序中都要进行数学运算,这时候算术运算符就是不可缺少的,表1-3中列出了常见的算术运算符。除了算术运算符外,C#中还有关系运算符,表1-4中列出了常见的关系运算符。2.条件语句我们就需要根据不同的情况来决定我们所要做的事情,条件语句是我们的最佳选择。在C#中条件语句有两种:if…else结构和switch结构。条件语句可以根据条件是否满足或根据表达式的值控制代码的执行路径,对于条件分支,C#继承了C和C++的结构,因此对我们来说并不陌生,即if(条件表达式) 程序语句[elseif 程序语句else

程序语句]在使用的过程中,需要注意以下几点:(1)条件表达式必须返回布尔值。(2)如果程序语句是多条语句,就需要用大括号“{}”把这些语句组合成为一个块。(3) elseif结构和else结构都是可选的,因此可以单独使用if语句,也可以将它们集合在一起来使用。(4) elseif语句的数量是不受限制的,可以根据需要写一个或多个。在我们制作的计算器中,运算符需要用户输入,这时我们就可以通过条件语句来判断用户的输入: //加if(op=="+")result=num1+num2;//减if(op=="-")result=num1-num2;//乘if(op=="*")result=num1*num2;//除if(op=="/")result=num1/num2;我们亦可以采用下面的方式: if(op=="+")//加result=num1+num2;elseif(op=="-")//减result=num1-num2;elseif(op=="*")//乘result=num1*num2;elseif(op=="/")//除result=num1/num2;elseConsole.WriteLine("您的输入有误!");上面两个代码片段实现的功能是一样的,区别只是所采用的条件语句的结构不同。相比较而言,第二个代码片段的结构更加紧凑,而且可以明显地看出来这是一个完整的多分支的判断结构。switch...case语句是C#中另外一个用于分支判断的结构,它适合从一组互斥的分支中选择一个执行。其形式是switch参数的后面跟着一组case子句,如果switch参数中表达式的值等于某个case子句旁边的值,就执行该case子句中的代码: switch(参数){case值1:[break;]case值2:[break;][default:break;]}对于switch结构来说,我们在使用的时候也需要注意以下几点:(1) case子句是不需要使用“{}”符号的。(2) case子句的值必须是常量表达式,不允许使用变量。(3)如果case子句只有值而没有语句,则可以不写break,否则break是不能少的。(4) default子句的作用是,如果表达式的值不符合任何一个case子句的值,就执行default子句的代码。它不是必需的,但是作为一个好的编程习惯,强烈建议在switch结构中加上default子句。我们可以使用switch结构来完成上面的判断:switch(op){case"+":result=num1+num2;break;case"-":result=num1-num2;break;case"*":result=num1*num2;break;case"/":result=num1/num2;

break;default:Console.WriteLine("您的输入有误!");break;}在上面的代码中我们采用了switch结构来完成对用户输入的判断,参数是用来存放用户输入的变量op,四个case分别对应加、减、乘、除运算,最后的default子句用来处理用户的错误输入。1.5.3实现计算器有了运算符和条件语句,我们就可以来完成计算器的制作了:staticvoidMain(string[]args){//声明变量floatnum1=0,num2=0,result=0;stringop="";//接收用户输入Console.Write("请输入第一个数字:");num1=float.Parse(Console.ReadLine());Console.Write("请输入第二个数字:");num2=float.Parse(Console.ReadLine());

Console.Write("请输入运算符[+、-、*、/]:");op

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论