1、2019年2月8日,第一部分 .NET与C#概述,教学目标,本部分将介绍.NET战略的提出及其意义、C#(发音为“C Sharp”)语言的特点以及.NET Framework的工作原理。通过这一部分的学习,使大家对.NET Framework和C# 有一个概括性的认识,这对于理解如何利用C#进行编程是非常重要的。,教学重点,.NET战略和.NET的意义 .NET Framework的工作原理 C#和.NET Framework的含义 C#与其它语言比较 命名空间 C# 2.0的新增功能,一、 .NET概述,什么是.NET Microsoft .NET在提出概念的最初叫做NGWS(Next Ge
2、neration Windows Services),它使Microsoft从以客户机为中心的传统单机模式转移到以网络为中心的广阔模式,并以此为中心拟定了一个新的战略。 Microsoft .NET是一项革命性的技术框架。.NET的核心技术包括分布式计算、XML、组件技术、即时编译技术等。,1、.NET平台的内容,.NET Framework,它包括Common Language Runtime(CLR),即通用语言运行环境,这是用于运行和加载应用程序的软件组件;以及新的类库,这些类库分级组织了开发者可以在他们的应用程序中用来显示图形用户界面、访问数据库和文件以及在Web上进行通信的代码集合。
3、 ASP .NET,一个取代以前的Active Server Pages(ASP)的特殊类库,用来创建动态的Web内容和Web服务器应用程序,这些都将采用诸如HTML、XML和Simple Object Access Protocol(SOAP)(简单对象访问协议)等Internet协议和数据格式。采用这项技术的网页请求速度更快,编写更简单 。 .NET开发者工具,包括:Visual Studio .NET集成开发环境,用来开发和测试应用程序;.NET编程语言(例如VB .NET和C#),用来创建运行在CLR下并且使用类库的应用程序。,2、.NET中的MSIL原理图,.NET采用特殊的方式编译
4、和执行程序,先通过编译器编译,程序会被编译成微软中介语言MSIL(Microsoft Intermediate Language)文件,MSIL将来被启动时会启动MSIL编译器,将MSIL编译成机器码,然后加载CPU执行,3、Microsoft .NET的意义,对开发者的意义 对于开发者而言,.NET使他们能应用自己最熟悉的语言创建应用程序,并从异种数据源查询信息成为可能。 .NET对开发人员来说十分重要,因为.NET不但会改变开发人员的开发应用程序的方式,而且使得开发人员能创建出全新的各种应用程序。新型开发范例的核心是Web服务这个概念的引入。 对其他从业人员的意义 .NET对计算机界其他从
5、业人员来说也是非常重要的,因为计算机的功能将会得到大幅度提升,同时计算机操作也会变得非常简单。用户将完全摆脱人为的硬件束缚,可以通过任何桌面系统、任何便携式电脑、任何移动电话或PDA进行对互联网的访问,并可对其进行跨应用程序的集成。 对企业的意义.NET将保证完全消除当今计算技术中的所有缺陷;.NET能实现确保用户在任何地点、任何设备都可访问其个人数据和应用程序的宏伟蓝图。除此之外,.NET技术还可以实现多个应用程序在逻辑上的松散耦合链接和紧密耦合链接。,二、.NET Framework,.NET Framework是一种新的计算平台,它简化了在高度分布式Internet环境中的应用程序开发,
6、是.NET平台的核心部分。.NET Framework旨在实现下列目标: 提供一个一致的面向对象的编程环境,无论对象代码是在本地存储和执行,在本地执行但在Internet上分布,还是在远程执行。 提供一个将软件部署和版本控制冲突最小化的代码执行环境。 提供一个可消除脚本环境或解释环境的性能问题的代码执行环境。 使开发人员的经验在面对类型大不相同的应用程序(如基于Windows的应用程序和基于Web的应用程序)时保持一致。 提供一个保证代码(包括由未知的或不完全受信任的第3方创建的代码)安全执行的代码执行环境。 按照工业标准生成所有通信,以确保基于.NET Framework的代码可与任何其他代
7、码集成。,1、.NET Framework的内容,公共语言运行时(CLR) 公共语言运行时是一个在执行时管理代码的代理,它提供核心服务(如内存管理、线程管理和远程处理),而且还强制实施严格的类型安全以及可确保安全性和可靠性的其他形式的代码准确性。 .NET Framework类库,2、.NET Framework内部关系,3、.NET Framework的工作原理,MSIL 即时编译器JIT 程序集 托管代码 垃圾回收 链接,MSIL,MSIL包括用于加载、存储和初始化对象以及对对象调用方法的指令,还包括用于算术和逻辑运算、控制流、直接内存访问、异常处理和其他操作的指令。 当编译器产生MSIL
8、的同时也产生元数据。 中间语言(Intermediate Language,IL)代码不是字节代码,但是它的简单二进制指令与那些现代微处理器指令之间存在镜像关系,并且具有紧密交互作用,使得从IL到机器代码的编译很快 。 运行.NET SDK提供的ILDASM.EXE工具(可以在.NET SDK的安装目录下找到)进行IL反汇编程序,即时编译器JIT,公共语言运行库为所支持的每种CPU结构都提供了JIT编译器,开发人员可以编写一组可在具有不同结构的计算机上进行JIT编译和运行的MSIL。 JIT编译考虑了在执行过程中某些代码可能永远不会被调用的事实。它不是耗费时间和内存将可移植可执行(PE)文件中
9、的所有MSIL转换为本机代码,而是在执行期间根据需要转换MSIL并存储生成的本机代码以供后继的调用使用。,程序集,在编译应用程序时,所创建的MSIL代码存储在一个程序集中,程序集包括可执行的应用程序文件(这些文件可以直接在Windows上运行,不需要其他程序,其扩展名是.exe)和其他应用程序使用的库(其扩展名是.dll)。 程序集还包含元信息(即程序集中包含的数据的信息,也称为元数据)和可选的资源(MSIL使用的其他数据,例如声音文件和图片),托管代码,把代码编译为MSIL,再用JIT编译器把它编译为本机代码后,CLR的任务还没有全部完成。用.NET Framework编写的代码在执行(这个
10、阶段通常称为运行时(runtime)时是托管的。即CLR管理着应用程序,其方式是管理内存、处理安全性,以及允许进行跨语言调试等。相反,不在CLR控制之下运行的应用程序是非托管的,某些语言如C+可以用于编写这类应用程序,例如,访问操作系统的低级功能。但是,在C#中,只能编写在托管环境下运行的代码。我们将使用CLR的托管功能,让.NET自己与操作系统进行交互。,垃圾回收,托管代码最重要的一个功能是垃圾回收(garbage collection)。这种方法可以确保应用程序不再使用某些内存时,这些内存就会被完全释放。 .NET垃圾回收会频繁检查计算机内存,从中删除不再需要的内容。,链接,编译为MSIL
11、的C#代码不一定包含在单独的文件中,而可能存放在多个源代码文件中,最后把它们编译到一个程序集中。这个过程称为链接。 这样做有以下几个好处: 编译器处理几个较小的文件比处理一个大文件要简单得多; 可以把逻辑上相关的代码分解到一个文件中,以便单独处理它,这也更易于在需要代码时找到它们; 开发小组可以把编程工作分解为可管理的模块,让每个人编写一小块代码,而不会破坏已编写好的代码部分或者其他人正在处理的部分。,三、C#简介,C#与C+ C#与Java 使用C# 编写程序 命名空间 C# 2.0的新增功能,1、C#与C+,C# 禁止使用指针和指针算法(除了在不安全的代码块中); C# 删除了预处理器的宏
12、(但保留了条件编译和#defined 常数),复杂的宏在以不希望的方式扩展到复合输入变元中时,会出现错误; C# 要求在引用变量的值之前,必须先显示声明该变量,并用一个初始值进行初始化; C# 使用switchcase语句,为了防止程序员疏忽,switch语句中的每个case从句都必须有一个闭合的break命令; C# 删除了全局函数,迫使用户进行面向对象的编程,如果只有一个静态成员,那么程序中的每个函数都必须是类的一个成员,就连开始的Main()函数也定义为一个类的成员; 在编译C#类库时,编译器会自动把它们显示为可以由客户应用程序重使用的组件,用户不会混淆GUID和ATL宏; C# 支持使
13、用Windows Forms快速开发图形化用户界面,用户不必编写代码来处理OnPaint事件; C# 标准化包含类定义和类执行的单个文件的使用,把类的定义和其执行放在一个文件中,使类更易于维护。,2、C#与Java,C# 的语法要比Java强大,因为C#支持运算符重载和类型安全的枚举,另外,如果需要,还可以在C#代码中选择嵌入式指针和其它不合法的语法,只要把它们放在“非安全”的代码块中即可。 C# 可以与其他.NET语言编写的代码进行无缝的交互操作,IT部门不需要标准化C#,就可以在工程中使用它。 .NET基类为C#提供了一个统一的、标准的源,以满足常用功能的需要。例如XML、互联网和图形化。
14、为了访问相同的功能,Java程序员有时必须从各种不同的源中获取。,3、使用C# 编写程序,控制台应用程序:这类应用程序是运行在DOS窗口上的纯文本应用程序,在单元测试类库或创建后台过程时,可用使用控制台应用程序。 Windows应用程序:这些应用程序如Microsoft Office,有我们很熟悉的Windows外观和操作方式,使用.NET Framework的Windows Forms模块就可以生成这种应用程序。Windows Form模块是一个控件库,其中的控件可以用于建立Windows用户界面(UI)。 Web应用程序:这些是Web页,可以通过任何Web浏览器查看。.NET Framew
15、ork包括一个动态生成Web内容的强大系统,允许个性化、实现安全性等。这个系统叫作Active Server Pages.NET (ASP.NET) 。 Web服务:这是创建各种分布式应用程序的新方式,使用Web服务可以通过Internet虚拟交换数据。Web服务是一种应用程序,它可以使用标准的互联网协议,像HTTP和XML。可将Web服务视作Web上的组件编程。无论使用什么语言创建Web服务,也无论Web服务驻留在什么系统上,都使用一样简单的语法。,4、命名空间,命名空间是.NET避免类名冲突的一种方式,实际上,命名空间就是一组数据类型,但命名空间中的所有数据类型的名称都会自动加上一个该命名
16、空间的名字作为前缀。另外,命名空间是可以嵌套的。 命名空间的声明由关键字namespace,跟着一个命名空间名称和主体,最后有一个可选的分号组成。,5、C# 2.0的新增功能,泛型是2.0版C# 语言和公共语言运行库 (CLR) 中的一个新功能。使用泛型类型可以使程序员能够实现最大限度地重用代码、保护类型的安全以及获得更高的集合类性能。 迭代器是 C# 2.0 中的新功能。它是可以返回相同类型的值的有序序列的一段代码。迭代器可用作方法、运算符或get访问器,它使程序员在类或结构中支持foreach迭代,而不必实现整个IEnumerable接口。 分部类型定义允许将单个类型(比如某个类)拆分为多
17、个文件。Visual Studio 设计器使用此功能将它生成的代码与用户代码分离。使用partial关键字表明可在命名空间内定义该类、结构或接口的其他部分。 可空类型允许变量包含未定义的值。在使用数据库和其他可能包含未含有具体值的元素的数据结构时,可以使用可空类型。,小 结,重点介绍.NET战略的提出和意义以及.NET Framework的工作原理,.NET Framework是一种新技术,该架构在应用程序开发环境中引入了一种执行操作的新方式。C#是可用于创建要运行在.NET CLR上的应用程序语言之一,它从C和C+语言演化而来,是Microsoft专门为使用.NET平台而创建的。所以理解并掌
18、握.NET Framework的工作原理对于学习C#是非常重要的。另外,最后还对C#语言做了简单介绍。通过这一部分的学习,大家将对.NET Framework和C# 有一个概括性的认识,激发进一步学习C#的兴趣。,思考和练习,1. 什么是.NET,简述.NET的意义。 2. .NET Framework包括哪些内容? 3. 简述.NET Framework的工作原理。 4. C# 与C+和Java语言相比有什么优缺点? 5. 什么是命名空间,使用命名空间有什么好处?,第二部分 Visual Studio 2005开发环境,教学目标,本部分将介绍Visual Studio 2005(VS) 开发
19、环境,VS是一个非常复杂庞大的产品,可能会使初学者感到畏惧,但使用它创建简单的应用程序是非常容易的。本部分将创建两个简单的应用程序,第一个应用程序是控制台应用程序,控制台应用程序没有使用图形化的Windows环境,而是在一个命令行窗口中运行应用程序;第二个应用程序是Windows 窗体应用程序,其外观和操作方式对Windows用户来说非常熟悉,而且该应用程序创建起来并不费力。通过本部分的学习,大家将对VS开发环境有个整体的了解,后续的学习过程中将不断介绍该开发环境的具体应用细节。,教学重点,Visual Studio 2005开发环境 “选项”对话框 在VS中开发C#应用程序 使用“属性”窗口
20、,为什么选择Visual Studio 2005 Visual Studio 2005 Express产品 VS解决方案,一、Visual Studio 2005概述,VS可以自动执行编译源代码的步骤,同时可以完全控制重写它们时应使用的任何选项。 VS文本编辑器可以配合VS支持的语言(包括C#),智能地检测错误,在输入代码时给出合适的推荐代码。 VS包括Windows Forms 和 Web Forms设计器,允许UI元素的简单拖放设计。 在C#中,许多类型的项目都可以用已有的“模板”代码来创建,不需要从头开始。对于新的“初学者工具包”项目类型来说尤其如此,该项目类型可以以功能全面的应用程序为
21、基础进行开发。一些“初学者工具包”项目类型包含在VS安装程序中,还可以在线使用更多的项目类型。 VS包括几个可自动执行常用任务的向导,它们可以在已有的文件中添加合适的代码,而不需要考虑(在某些情况下)语法的正确性。 VS包含许多强大的工具,可以显示和导航项目中的元素,这些元素可以是C#源文件代码,也可以是其他资源,例如位图或声音文件。 除了在VS中编写应用程序比较简单外,还可以创建部署项目,以易于为客户提供代码,并方便地安装该项目。 在开发项目时,VS可以使用高级调试技巧,例如能一次调试一行指令,设置断点,监视应用程序的状态等。,1、为什么选择Visual Studio 2005,2、Visu
22、al Studio 2005 Express产品,除了Visual Studio 2005之外,Microsoft还提供了几个更简单的开发工具,称为Visual Studio 2005 Express产品。其中与C#相关的两个产品是Visual C# 2005 Express和Visual Web Developer 2005 Express,通过它们可以创建几乎所有的C#应用程序。在功能上它们是VS的删节版本,但外观和操作方式是一样的 。,3、VS解决方案,解决方案不仅仅是一个应用程序,还包含项目,可以是Windows Forms项目、Web Form项目等。但是,解决方案可以包含多个项目,
23、即使相关的代码最终在硬盘上的多个位置编译为多个程序集,也可以把它们组合到一个解决方案中。这一点是非常有用的,因为它可以处理“共享”代码(这些代码放在GAC中),同时,应用程序也使用这段共享代码。,二、环境介绍,第一次运行VS时,要求用户选择默认的环境设置 “选项”对话框 通过“选项”对话框用户可以对VS的环境、项目和解决方案、源代码管理、文本编辑器、设备工具、HTML设计器、Windows窗体设计器、程序调试以及数据库工具等选项进行比较详细的设置。从而使开发环境更适合自己。,三、使用VS开发C#应用程序,控制台应用程序 选择“文件”| “新建” | “项目”菜单命令 在打开的“新建项目”对话框
24、中“项目类型”列表中选择Visual C# 节点下的Windows,在“模板”窗格中选择“控制台应用程序”项目类型 编写代码static void Main(string args) Console.WriteLine(“欢迎大家学习C#!“); 选择“调试”|“启动调试”菜单命令 ,编译并运行该程序,使用VS开发C#应用程序(续),Windows应用程序 选择“文件”| “新建” | “项目”菜单命令 在打开的“新建项目”对话框中“项目类型”列表中选择Visual C# 节点下的Windows,在“模板”窗格中选择“Windows应用程序”项目类型 添加控件,通过“属性”窗口修改控件的属性
25、为控件添加事件处理程序,编写代码 选择“调试”|“启动调试”菜单命令 ,编译并运行该程序,使用VS开发C#应用程序(续),解决方案资源管理 “属性”窗口 “错误列表”窗口 使用智能提示,小 结,本部分介绍了Visual Studio 2005的开发环境,以及如何在VS中开发C#应用程序,重点介绍了控制台应用程序和Windows应用程序。其中比较简单的是控制台应用程序,它足以满足大多数需要,便于我们集中精力学习C#编程的基础知识。Windows应用程序比较复杂,但其可视化程度比较高,对于习惯了Windows环境的人来说,使用起来也比较直观。通过本部分的学习,应熟悉VS 2005的工作环境,掌握各种应用程序的创建方法 。,思考和练习,上机实验: (1) 在VS 2005中创建一个C# 控制台应用程序,输出“这是我的第一个C#程序”。 (2) 创建一个Windows应用程序,设置窗体的Text属性为“我的新程序”,在消息框中显示“C#应用程序”。,