高级程序设计地球科学与技术学院测绘系2015.102前言教材:C#程序设计与案例教程,杨树林、胡洁萍编著,清华大学出版社,2007.08参考书:C#入门经典(第5版),(美)沃森、内格尔等著,齐立波翻译,清华大学出版社,2010.12上课时间:周二1、2节,西廊101,第7-10、13-17周周四3、4节,西廊101,第7-8、10、14、16周上机时间:周一1、2节,微601,第9-10、13-17周周三1、2节,微601,第9、13、15周3课程主要内容第1章C#语言基础第2章面向对象程序设计第3章GUI程序设计第4章图形、图像程序设计第5章数据库程序设计第6章流和文件第7章线程(不讲)第8章网络程序设计(不讲)第9章ASP.NET(不讲)第1章C#语言基础5第1章目录1.1C#概述1.2C#语言基础1.3控制语句1.4数组1.5异常处理61.1C#概述1、.NET概述2、什么是C#3、VisualStudio.Net集成开发环境4、初识C#程序5、命名空间71.1.1.NET概述.NET是微软公司推出跨平台、跨语言开发平台。机器语言汇编语言高级语言硬件依赖高硬件依赖低可移植性低可移植性高可复用性低可复用性高81.1.1.NET概述FORTRANC.NET(C#)源代码复用二进制码复用Java跨平台跨语言91.1.1.NET概述.NETFramework体系结构操作系统公共语言运行时(CLR)VC++.NetC#VB.NetVJ#….NetFramework类库(FCL)101.1.1.NET概述CLR和MSIL(CIL)日语汉语翻译英语(中间语言)111.1.1.NET概述CLR和MSIL(CIL)121.1.1.NET概述CLR和MSIL(CIL)编译C#|-程序集(.exe、.dll[MSIL])、元信息[数据信息]、可选资源[图片、声音])|(MicrosoftIntermediateLanguage微软中间语言)||-.NETCLR(CommonLanguageRuntime公共语言运行库)|-JIT编译(Just-In-Time,称为即时编译,仅在需要时才编译MSIL)|——机器代码131.1.1.NET概述CLR和MSIL(CIL)有了CLR,保证了.NET中一种语言具有的功能其他语言也都具有。Microsoft中间语言(MSIL)由一组特定的指令组成,这些指令指明如何执行代码。JIT编译器的主要工作是将普通MSIL代码转换为可以直接由CPU执行的计算机代码。系统进程可以轻松读取MSIL代码。141.1.1.NET概述.NET组成NET平台包括.NET框架---NET框架(Framework)是开发平台的基础公共语言运行时(CLR).NET类库.NET开发工具等组成部分。.NET编程语言(C++.NETC#.NETVB.NET…).VisualStudio.NET集成开发环境15基本框架类WebFormsWebServicesWinFormsADO.Net和XML类.NetFramework.NetFramework类库ASP.NETCLSCLRCTS1.1.1.NET概述16.NET版本1.1.1.NET概述17CLS(CommonLanguageSpecification):不同语言程序之间相互通用必须遵守的规则和限制。CTS(CommonTypeSystem):CLS中对数据类型的规定。1.1.1.NET概述181.1.2什么是C#C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。C#由C语言和C++派生而来,继承了其强大的性能,同时又以.NET框架类库作为基础,拥有类似VisualBasic的快速开发能力。C#由安德斯·海尔斯伯格主持开发,微软在2000年发布了这种语言。原Borland公司的首席研发设计师安德斯·海尔斯伯格(AndersHejlsberg)在微软开发了VisualJ++1.0,很快的VisualJ++由1.1版本升级到6.0版。SUN公司认为VisualJ++违反了Java开发平台的中立性,对微软提出了诉讼。2000年6月26日微软在奥兰多举行的“职业开发人员技术大会”(PDC2000)上,发表新的语言C#。C#语言取代了VisualJ++,语言本身深受Java、C和C++的影响。191.1.2什么是C#版本C#版本变化和.NetFramework版本变化一样,新版本总是在旧版本基础上增加了新的功能或增强了已有功能。201.1.2什么是C#语言特征,相对于C和C++,C#在许多方面进行了限制和增强:指针(Pointer)只能被用于不安全模式。大多数对象访问通过安全的引用实现,以避免无效的调用。对象不需要被显式释放,代替为当不存在被引用时通过垃圾回收器回收。只允许单一继承(singleinheritance),但是一个类可以实现多个接口(interfaces)。C#比C++更加类型安全。默认的安全转换是隐含转换,例如由短整型转换为长整型和从派生类转换为基类。而布尔型同整型,及枚举型同整型不允许隐含转换。数组声明语法不同(int[]a=newint[5]而不是inta[5])。属性支持,使用类似访问成员的方式调用。211.1.3VisualStudio.NET集成开发环境VisualStudio集成开发工具不同版本22MicrosoftVisualStudio起始页23新建项目对话框24代码编辑器,用于编写源代码。“工具箱”,用于使用鼠标迅速开发可视化界面。解决方案资源管理器,用于查看和管理项目文件和设置。项目设计器,用于配置编译器选项、部署路径、资源及更多其他内容。属性窗口,用于配置用户界面中控件的属性和事件。VisualStudio调试器,用于对程序进行测试。类视图,用于根据类型(而不是文件)在源代码中导航。对象浏览器,用于查看.NETFramework程序集和COM对象中可用的方法和类。25VisualStudio.NET集成开发环境26属性窗口属性描述控件选择事件图标属性图标属性名属性值按字母排序271.1.4初识C#程序【例1-1】一个简单的控制台程序。C#语言使用类来组织和包装代码,所有可执行代码都必须包含在类中。using指令用于声明程序中使用的系统类所在的命名空间。如:Console类包含在System命名空间中。//声明系统命名空间usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;//用户自定义命名空间namespaceExam_1_1{///summary///程序开始类:Program////summaryclassProgram{///summary///应用程序的主入口方法:Main////summary///paramname=args/paramstaticvoidMain(string[]args){Console.WriteLine(请输入你的名字:);stringusername=Console.ReadLine();Console.WriteLine(欢迎{0}进入C#世界!,username);}}}281.1.4初识C#程序【例1-1】一个简单的控制台程序。注释方式:单行注释//注释内容多行注释/*注释第1行…注释第n行*/文档注释///文档注释即XML注释,将文档注释的内容转为XML文档保存。//声明系统命名空间usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;//用户自定义命名空间namespaceExam_1_1{///summary///程序开始类:Program////summaryclassProgram{///summary///应用程序的主入口方法:Main////summary///paramname=args/paramstaticvoidMain(string[]args){Console.WriteLine(请输入你的名字:);stringusername=Console.ReadLine();Console.WriteLine(欢迎{0}进入C#世界!,username);}}}291.1.4初识C#程序【例1-1】一个简单的控制台程序。Main方法:Main方法是C#控制台应用程序或窗口应用程序的入口点,程序控制流在该处开始和结束。Main在类或结构的内部声明。Main方法必须是静态的,且不应该是公用的(默认访问级别是private)但不要求所在类或结构是静态的。Main的返回类型有两种:void或int。Main方法可以包含命令行参数string[],也可以不具有这样的形参。301.1.4初识C#程序【例1-1】一个简单的控制台程序。控制台输入、输出使用.NETFramework中System命名空间中的Console类提供的输入输出方法。输入:Console.Read();//读取一个字符Console.ReadLine();//读取一行字符输出:Console.Write();//以文本形式输出Console.WriteLine();//以文本形式输出并换行若输出若干变量值,则用{0}表示第一项,{1}表示第二项,依此类推,如:intyear=1066;stringbattle=BattleofHastings;Console.WriteLine(The{0}tookplacein{1}.,battle,year);311.1.4初识C#程序【例1-2】一个图形界面程序。设计一个程序,界面上用一个文本框输入姓名,单击“确定”按钮后,在文本框中显示“欢迎XXX进入C#世界!”,运行结果如下图所示。321.1.5命名空间命名空间类似于文件系统中的文件夹,可以看作相关类的一个容器。命名空间分为两类:用户定义的命名空间、系统定义的命名空间。系统命名空间:NETFramework本身有八十多个命名空间,每个命名空间中有上千个类。System.Drawing:提供了GDI+基本绘图功能;System.IO:提供数据文件读写等功能;System.Collections:提供了列表、队列等集合操作用户定义的命名空间是在代码中定义的命名空间。331.1.5命名空间namespace命名空间名称{用户代码}命名空间可以嵌套命名空间的使用使用using指令能够引用给定的命名空间或创建命名空间的别名(using别名)。using[别名=]类或命名空间名;如:usingSystem;usingSystem.Drawing;usingStatisticalData;namespaceStatisticalData{classFileHandling{publicvoidLoad(){…}//codetoloadstatisticaldata}}namespaceImages{classFileHandling{publicvoidLoad(){…}//codetoloadanimagefile}}classProgram{staticvoidMain(){StatisticalData.FileHandlingdata=newStatisticalData.FileHandling();data.Load();Images.FileHandlingimage=newImages.FileHandling();image.Load();}}34命名空间类的描述System定义通常使用的数据类型和数据转换的基本.NET类。System.Collections定义列表、队列、位数组合字符串