第1章C#与NET平台介绍本章目标了解.NETFramework的结构理解.NETFramework的基本概念CLRJITCTSMSIL了解.NETFramework命名空间了解C#程序的基本结构1C#语言的由来在过去的二十年里,C和C++已经成为在商业软件的开发领域中使用最广泛的语言。它们为程序员提供了十分灵活的操作,不过同时也牺牲了一定的开发效率。与VB等语言相比,同等级别的C/C++应用程序往往需要更长时间来开发。由于C/C++语言的复杂性,许多程序员都试图寻找一种新的语言,希望能在功能与效率之间找到一个更为理想的权衡点。VB以牺牲灵活性的代价来提高效率。可是这些灵活性正是C/C++程序员所需要的。这些解决方案对编程人员的限制过多(如屏蔽一些底层代码控制的机制),所提供的功能难以令人满意。这些语言无法方便地同早先的系统交互,也无法很好地和当前的网络编程相结合。对于C/C++用户来说,最理想的解决方案无疑是在快速开发的同时又可以调用底层平台的所有功能。他们想要一种和最新的网络标准保持同步并且能和已有的应用程序良好整合的环境。另外,一些C/C++开发人员还需要在必要的时候进行一些底层的编程。C#(Csharp)是对这一问题的解决方案。C#是一种新的、面向对象的编程语言。它使得程序员可以快速地编写各种基于Microsoft.NET平台的应用程序,Microsoft.NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。C#语言的特点:C#语言是Microsoft发布的一种全新的编程语言,是其.Net战略的一枚重要棋子。C#语言是面向对象的、现代的编程语言,用C#编写的应用程序可以充分利用.Net的框架体系带来的优点.既可以用来编写基于通用网络协议的Internet服务软件,也可以编写各种数据库、网络服务应用程序和Windows窗口界面程序。C#继承了C/C++的优点和灵活性,能够充分利用OS系统的底层功能,同时又具备了完全的面向对象特性。可以让初学者直接了解面向对象编程的各种概念,学习现代的编程思想和手段。代码被执行C++VB编译器编译器可执行代码可执行代码RUNTIMERUNTIME2.NET代码的编译语言特定的编译器和运行库代码被执行C++VB编译器编译器可执行代码可执行代码RUNTIMERUNTIMEIL+元数据CLRIL和CLR的使用IntermediateLanguageCommonLanguageRuntime编译执行.NET程序MSIL+元数据机器代码代码被执行CLR第一次编译第二次编译.NET程序被编译两次,第一次编译很慢,而第二次编译较快!语言编译器.NET源代码Microsoft中间语言MSIL+元数据机器代码代码被执行CLRMSIL帮助语言实现互操作IL不是字节代码,但很接近字节代码。因此,执行应用程序时,IL到机器码的转换速度非常快!通过CLR将MSIL转换为具体CPU的代码CPU无关的指令集语言编译器.NET源代码程序集清单元数据中间语言清单元数据中间语言清单元数据中间语言client.execlient.execlientlib.dll清单元数据中间语言元数据中间语言client.execlientlib.netmoduleIL语言范例IL_0000:nopIL_0001:callIL_0006:nopIL_0007:ldc.i4.0IL_0008:callIL_000d:nopIL_000e:ldnullIL_000f:ldftnIL_0015:newobjIL_001a:callIL_001f:nopIL_0020:newobjIL_0025:callIL_002a:nopIL_002b:newobjIL_0030:throw通用语言运行时CLRCLR.NET源代码MSIL+元数据机器代码代码被执行管理内存易于设计组件和应用程序,其对象可以跨语言互动跨语言集成(特别是跨语言继承)JIT编译器:一次编译,就可运行在支持运行库的任何CPU和操作系统上语言编译器.NET的语言互操作性:不同语言编写的代码可互相调用C#的平台移植性:框架JIT编译器(JustInTime,即时编译器)3.NETFramework简介.NETFramework类似于JVM.NETFramework两个主要组件:通用语言运行时(CLR)统一的类库集.NET的类库:线程文件输入/输出(I/O)数据库支持XML解析数据结构…….NETFramework的体系结构VisualStudio.NETCLR通用语言运行时(CLR)BaseClassLibrary:IO,Drawing,ThreadingDataandXMLXMLWebservicesWindowsFormsWebForms通用语言规范(CLS)VBC++C#…JScript操作系统.NetFramework类库(FCL)CLS和CTS通用语言规范CLSCommonLanguageSpecification规定所有.NET语言都应遵循的规则生成可与其他语言互操作的应用程序通用类型系统(CommonTypeSystem,CTS)包含标准数据类型包含准则集CLS、CTS和MSIL紧密配合以实现语言互操作性对象类接口数组基本类型结构枚举引用类型值类型命名空间就像在文件系统中一个文件夹容纳多个文件一样,可以看作某些类的一个容器。通过把类放入命名空间可以把相关的类组织起来,并且可以避免命名冲突。命名空间既用作程序的“内部”组织系统,也用作“外部”组织系统(一种向其他程序公开自己拥有的程序元素的方法)使用命名空间:using类似#include4命名空间1.HclassA{…}2.HclassA{…}3.cpp#include“1.h”#include“2.h”….3.cppclassA{…}classA{…}…namespacea1{classA{…}}namespacea2{classA{…}}3.csusinga1;usinga2;a1.Aa2.A常用命名空间命名空间说明System.Drawing处理图形和绘图,包括打印System.Data处理数据存取和管理,在定义ADO.NET技术中扮演重要角色System.IO管理对文件和流的同步和异步访问System.Windows处理基于窗体的窗口的创建System.Reflection包含从程序集读取元数据的类System.Threading包含用于多线程编程的类System.Collections包含定义各种对象集的接口和类5创建“HelloWorld”应用程序单击“开始”“程序”“MicrosoftVisualStudio.NET2005”“MicrosoftVisualStudio.NET2005”此时将打开VS.NET2005的起始页要创建C#控制台应用程序,请从列表中选择“创建建”“项目”。此时将打开“新建项目”窗口选择“VisualC#项目”作为项目类型,选择“控制台应用程序”作为模板C#模板Console.WriteLine(HelloWorld);输出HelloWorld.csprojAssemblyInfo.csProgram.cs“HelloWorld”应用程序文件编译和执行C#应用程序要生成C#项目,请从菜单中选择“生成”“生成解决方案”该过程将编译项目中包括的所有文件,编译结果显示在“输出”窗口中如果结果显示“生成:1成功或最新,0失败,0被跳过”,则说明已经成功生成,然后即可交付该应用程序要运行刚才生成的应用程序,请从菜单中选择“调试”“开始执行(不调试)”输出结果显示在VS.NET控制台窗口中C#应用程序文件夹结构VisualStudio.NET2005创建一个与项目同名的文件夹,此处为“HelloWorld”该文件夹包含项目文件“HelloWorld.csproj”和其他关联文件每个新项目都创建了bin、obj和Properties三个文件夹。Bin和obj这两个文件夹下都有一个Debug子目录,其中包含可执行文件HelloWorld.exe在“解决方案资源管理器”中启用“显示所有文件”选项,可查看“HelloWorld”项目的结构//这是用C#编写的一个简单的HelloWorld程序usingSystem;namespaceNotepad{classHelloWorld{staticvoidMain(){Console.WriteLine(HelloWorld);}}}声明HelloWorld类描述代码的注释HelloWorld程序程序入口点,Main的返回类型为void控制台类的WriteLine()方法用于显示输出结果导入System命名空间声明命名空间Notepad将文件保存为*.cs说明:1.程序一般包括以下几部分:名称空间的引用:使用using关键字指明引用的名称空间。名称空间的声明:使用namespace关键字声明名称空间。类:使用class关键字声明类。Main方法:Main方法是C#程序的入口。2.类中包含了程序所要用到的数据和所要执行的方法的定义。每个类中可以有:(1)变量声明(2)构造函数(3)方法(4)属性(5)事件3.一个文件中可以有1个或者多个类。4.所有语句都以分号;结束。ZJWCHCC#语言基础第2章目标在C#中定义变量和常量使用C#中的基本数据类型理解装箱和拆箱的概念使用C#中的运算符,选择结构和循环结构定义和使用数组,了解结构和枚举了解C#中的预处理指令理解C#中常用的字符串处理方法第一个C#程序:HelloWorld1.usingSystem;2.classHelloWorld3.{4.staticvoidMain()5.{6.Console.WriteLine(“Hello,World!”);7.}8.}HelloWorld.cs第一个C#程序:HelloWorld1:usingSystem;第1行:using关键字用来引用.NET框架类库中的资源通常在程序文件的开头使用如果程序中需要多种资源,可以使用多次usingSystem命名空间System命名空间提供了构建应用程序所需的系统统能的访问第一个C#程序:HelloWorld2:classHelloWorld3:{………..8:}第2,3,8行:类在C#或其他面向对象语言中,需要编写类使用关键字class定义一个类,类的内容放在一对{}中示例中定义了一个名为HelloWorld的类第一个C#程序:HelloWorld4:staticvoidMain()5:{………..7:}第4,5,7行:•Main方法Main方法是应用程序的入口点,编译器将由该处开始执行程序方法体也放在一对{}中每个C#的应用程序都必须包含Main方法4:staticvoidMain()5:{………..7:}第4,5,7行:•Main方法static表示Main方法是一个全局方法void表示Main方法没有任何返回值,即返回值是空参数放在小括号中定义。此处括号内没有内容,表明Main方法没有任何参数第一个C#程序:HelloWorld6:Console.WriteLine(“Hello,World!”);第6行:•语句在C#中要执行的指令语句之间用;分隔,编译器通过分号来区分多个语句使用大括号{}标识某个代码块的开始和结束,从而可以对语句进行组合。大括号必须成对匹配。第一个C#程序:HelloWorld6:Console.WriteLine(“Hello,World!”);第6行:•语句HelloWorld程序的主要目的就是在屏幕上显示一条问候WriteLine方法用来将问候语写到标准输出设备上。Console代表标准输出设备---屏幕,它属于System命名空间WriteLine方法是Console类的方法。访问类或对象的方法使用点取符.来完成。字符串用双引号“”表示字符串“Hello,World”是WriteLine方法的参数,表示屏幕输出的内容第一个C#程序: