资源预览内容
第1页 / 共31页
第2页 / 共31页
第3页 / 共31页
第4页 / 共31页
第5页 / 共31页
第6页 / 共31页
第7页 / 共31页
第8页 / 共31页
第9页 / 共31页
第10页 / 共31页
亲,该文档总共31页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
.NET程序设计.NETProgramming西电软件学院邓岳anfdenggmail.com.NET框架基本原理.NET框架概述.NET框架是由微软开发的一个致力于敏捷软件开发、快速应用开发、平台无关性和网络透明化的软件开发平台。.NET框架是一种采用系统虚拟机运行的编程平台。它以CLR为基础,支持多种语言(C#、C+等)的开发。.NET使得程序设计员可以同时进行Windows应用软件、网络应用软件、Web服务、WindowsPhone开发。.NET框架版本的演进1.01.0发行于发行于20022002年。微软第一个年。微软第一个VisualStudio.NETVisualStudio.NET版本版本(VisualStudio.NET2002VisualStudio.NET2002)的一部分。)的一部分。1.11.1首个主要的首个主要的.NET.NET框架升级版本,发行于框架升级版本,发行于20032003年。微年。微软第二个软第二个VisualStudio.NETVisualStudio.NET版本的一部分(版本的一部分(VisualVisualStudio.NET2003Studio.NET2003)。首个被)。首个被WindowsWindows操作系统操作系统(WindowsServer2003WindowsServer2003)所内置的)所内置的 .NET.NET框架版本。框架版本。内置了对内置了对 ODBCODBC和和 OracleOracle数据库的支持。数据库的支持。 .NETCompactFramework.NETCompactFramework(.NETCF.NETCF)- -一个用于一个用于手机等智能设备的手机等智能设备的 .NET.NET框架的子集。框架的子集。支持支持IPV6IPV6.NET框架版本的演进2.0发行于发行于20052005年年1010月。被包含在月。被包含在 VisualStudioVisualStudio20052005和和 SQLServer2005SQLServer2005内。内。提供的新特性提供的新特性支持支持泛型泛型支持支持6464位平台位平台.NET框架版本的演进3.0发布于发布于2006.112006.11(曾用名(曾用名WinFXWinFX),附带于),附带于VistaVista中。中。依然使用依然使用2.02.0版本的版本的CLRCLR,但加入了,但加入了适应未来软件发展方向的适应未来软件发展方向的4 4个框架:个框架:WPFWPF(WindowsPresentationFoundationWindowsPresentationFoundation) :提供更好的提供更好的UIUI体验。体验。 WCFWCF(WindowsCommunicationFoundationWindowsCommunicationFoundation) :提供支持:提供支持SOASOA的安全的的安全的WebWeb服务框架。服务框架。 WFWF(WindowsWorkflowFoundationWindowsWorkflowFoundation) :支持:支持设计与开发工作流相关的应用程序。设计与开发工作流相关的应用程序。 WCSWCS(WindowsCardSpaceWindowsCardSpace):曾用名):曾用名InfoCardInfoCard,用于,用于 SSOSSO(单点登录)。(单点登录)。 .NET框架3.0 .NET框架版本的演进3.5随随VS2008VS2008一起发布。一起发布。支持支持LINQLINQ和和ASP.NETAJAXASP.NETAJAX ,统一了,统一了WFWF和和WCFWCF。 20082008年年8 8月,微软推出了月,微软推出了 .NETFramework.NETFramework3.5SP13.5SP1。ADO.NETEntityFrameworkADO.NETEntityFramework。 对对 SQLServer2008SQLServer2008的数据提供程序支持。的数据提供程序支持。 .NET框架版本的演进4.0随随VS2010VS2010一起发布一起发布动态语言运行时动态语言运行时DLRDLR并行计算并行计算扩充了扩充了ADO.NETEntityFrameworkADO.NETEntityFramework、3W3W4.52011.102011.10发布技术预览版发布技术预览版每一版本具体更新情况参看每一版本具体更新情况参看http:/msdn.microsoft.com/zh-http:/msdn.microsoft.com/zh-cn/library/ms171868.aspxcn/library/ms171868.aspx.NET框架的两个主要组件CLRCLR多种语言的多种语言的互操作性互操作性托管和非托管代码之间的互操作性,可以继续使用托管和非托管代码之间的互操作性,可以继续使用 COMCOM组件和组件和 DLLDLL可由可由SQLServerSQLServer或或IISIIS承载承载框架类库(框架类库(FCLFCL)与与CLRCLR紧密集成的可重用的紧密集成的可重用的面向对象类型集合面向对象类型集合。能够完成一系列常见编程任务(诸如字符串管理、数能够完成一系列常见编程任务(诸如字符串管理、数据库连接以及文件访问等)据库连接以及文件访问等)支持多种专用开发方案的类型:支持多种专用开发方案的类型:控制台应用程序、控制台应用程序、WindowsWindows窗体程序、窗体程序、ASP.NETASP.NET 应用程序、应用程序、WebWeb服务、手机应用等服务、手机应用等CLR的主要功能基础类库支持(基础类库支持(BaseClassLibraySupportBaseClassLibraySupport) 内存管理、线程管理、内存自动回收内存管理、线程管理、内存自动回收安全性、型别检查、异常管理、除错管理安全性、型别检查、异常管理、除错管理中间码中间码(CIL)(CIL)编译到机器码编译到机器码(Native)(Native)开发人员使用高级编程语言编写程序。开发人员使用高级编程语言编写程序。编译器将代码编译成微软的中间语言编译器将代码编译成微软的中间语言( (CILCIL) )。程序执行时程序执行时CLRCLR会将会将CILCIL码转换为操作系统的本地码。码转换为操作系统的本地码。CLRCLR内置有内置有JITCompilerJITCompiler。.NET.NET平台大部分编译优化平台大部分编译优化并不是通过开发语言的编译器来完成并不是通过开发语言的编译器来完成类装载器类装载器 ClassLoaderClassLoaderCIL(CommonIntermediateLanguage)CILCIL类似一个面向对象的类似一个面向对象的汇编语言汇编语言,完全基于堆栈,运行,完全基于堆栈,运行在虚拟机上在虚拟机上.NET.NET平台上的语言只能执行平台上的语言只能执行CILCIL可以执行的操作可以执行的操作CILCIL原名原名MSILMSIL.assembly Hello .assembly Hello .method public static void Main() cil managed.method public static void Main() cil managed .entrypoint .entrypoint .maxstack 1 .maxstack 1 ldstr Hello, world! ldstr Hello, world! call void call void mscorlibSystem.Console:WriteLine(string)mscorlibSystem.Console:WriteLine(string) ret ret 高级语言代码高级语言代码CILCIL代码代码本地机器码本地机器码CLRCLR编译编译你自己的语言编译器编译器只要能把你的语言转化为CIL即可.NETvsJavaEECLI/CIL/C#CLI/CIL/C#与与 SunSun的的 JavaJava虚拟机虚拟机/byte/bytecode/Javacode/Java语言之间有不少的相似之处,也是竞语言之间有不少的相似之处,也是竞争者。争者。两者都使两者都使中间码中间码(CILvs.bytecodeCILvs.bytecode)。)。CILCIL被设计来被设计来JITJIT编译编译, ,而而 JavaJava的字节码在最初的的字节码在最初的时候则是设计成用于解释运行时候则是设计成用于解释运行.NET.NET现在只在现在只在 WindowsWindows上被完美地支持(类上被完美地支持(类UnixUnix系统下有系统下有MonoMono等支持,但有待完善),等支持,但有待完善),JavaJava多平台支持较好多平台支持较好 。JavaJava和和.NET.NET可可经经由由IKVMIKVM(在在.NET.NET上上实实现现的的JVMJVM和和JavaJava类库)作更多的沟通。类库)作更多的沟通。公共类型系统CTS定义了如何在运行库中声明、使用和管理类型的定义了如何在运行库中声明、使用和管理类型的规范规范是是CLRCLR支持支持多语言多语言的一个重要组成部分(符合的一个重要组成部分(符合CTSCTS规范的编程语言所撰写出的程序,都可以在规范的编程语言所撰写出的程序,都可以在CLRCLR中使用)。中使用)。 提供可在许多编程语言中完全实现的提供可在许多编程语言中完全实现的面向对象模面向对象模型型。 CTS支持两种类别的类型值类型值类型 值类型直接包含它们的数据,值类型的实例要么在值类型直接包含它们的数据,值类型的实例要么在堆堆栈栈上,要么上,要么内联内联在结构中。在结构中。.NET.NET类库中被称为类库中被称为“结构结构”或或“枚举枚举”的类型都是值类型。的类型都是值类型。引用类型引用类型存储变量存储变量内存地址的引用内存地址的引用,位于,位于堆堆上。上。 .NET.NET类库中被类库中被称为称为“类类”的类型都是引用类型。的类型都是引用类型。多个引用类型的变量可以引用同一对象。多个引用类型的变量可以引用同一对象。所有所有类型都派生自类型都派生自 System.ObjectSystem.Object 。内建内建4 4个方法:个方法:Equals()Equals()、GethashCode()GethashCode()、GetTypeGetType() ()、ToString()ToString()boxing和unboxingBoxing:值类型-引用类型,反之称unboxing程序并不一定要明确的告知编译器要将值类型转换成引用类型Int32 x = 5; Int32 x = 5; object o1 = (object) x; object o1 = (object) x; / / 显式式BoxingBoxingobject o2 = x; object o2 = x; / / 隐式式BoxingBoxingx = (int)o2; x = (int)o2; / / 显式式UnboxingUnboxing,在拆箱,在拆箱时必必须知道知道类型型CLS公共语言规范所有所有.NET.NET语言都必须遵循语言都必须遵循CLSCLS才能创建与其他语才能创建与其他语言可言可互操作互操作的应用程序,的应用程序,CLSCLS是是CTSCTS的子集的子集CLSCLS是面向是面向.NET.NET的开发语言必须支持的最小集合的开发语言必须支持的最小集合比如变量的命名规范等比如变量的命名规范等要保证互操作,只能使用要保证互操作,只能使用CLSCLS所列出的功能对象所列出的功能对象例如:例如:C#C#支持无符号数字类型(满足支持无符号数字类型(满足CTSCTS),但),但CLSCLS却仅仅识别符号数字类型。因此,如果用户在一个组却仅仅识别符号数字类型。因此,如果用户在一个组件中使用件中使用C#C#的无符号类型,就无法与不使用无符号数的无符号类型,就无法与不使用无符号数字类型的语言字类型的语言( (如如VB.NET)VB.NET)设计的设计的.NET.NET组件实现互操作组件实现互操作指针类型和函数指针类型是不符合指针类型和函数指针类型是不符合 CLSCLS的的如果不存在语言互操作的情况,则无需过多考虑如果不存在语言互操作的情况,则无需过多考虑CLSCLSCLR、CLS关系示意CLR/CTSCLR/CTSCLSC#VB.NETC+/CLI程序集Assembly程序集是任何程序集是任何 .NET.NET应用程序的应用程序的基本构造块基本构造块。EXEEXE或或DLLDLL形式形式程序集包含描述自己的内部版本号和其包含的所程序集包含描述自己的内部版本号和其包含的所有数据和对象类型的详细信息的有数据和对象类型的详细信息的元数据元数据。可以使。可以使用用反射反射来以编程方式获取关于程序集的信息。来以编程方式获取关于程序集的信息。可在单个应用程序中使用相同程序集的两个版本可在单个应用程序中使用相同程序集的两个版本程序集程序集仅在需要时才加载仅在需要时才加载,是在大型项目中管理,是在大型项目中管理资源的有效途径。资源的有效途径。程序集可以包含一个或多个模块。可以让多个开程序集可以包含一个或多个模块。可以让多个开发人员负责单独的模块,并通过组合所有这些模发人员负责单独的模块,并通过组合所有这些模块来创建单个程序集。块来创建单个程序集。程序集AssemblyCLR支持两种程序集:强命名程序集和非强命名程序集程序集有两种部署方式:私有或全局非强命名只能以私有方式部署部署到应用程序所在目录,移动整个目录就可以实部署到应用程序所在目录,移动整个目录就可以实现程序的安装和卸载现程序的安装和卸载强命名用发布者的密钥进行签名,能被全局部署GAC(全局程序集缓存)DLLHell问题通过将程序集放在GAC中,可在多个应用程序之间共享程序集。GACGAC的目的是容纳的目的是容纳同一个程序集的多个版本同一个程序集的多个版本GACGAC中存储了需要被多个应用程序共享的程序集。中存储了需要被多个应用程序共享的程序集。一般目录为一般目录为“windows/assembly”windows/assembly”不允许不允许手动在手动在DOSDOS下复制程序集到下复制程序集到GACGAC无法只根据文件名来区分程序集主文件名主文件名+ +版本号版本号+ +语言文化标识语言文化标识+ +公钥公钥用用”密钥对密钥对“而不是而不是GUIDGUID或或URLURL等方式的原因是等方式的原因是密钥对可以识别同一家公司发布的多个程序集密钥对可以识别同一家公司发布的多个程序集在GAC中安装强命名程序集GAC采用一种特殊的目录结构存储程序集,.NET框架自带一个扩展ShFusion.dll用于显示GAC的结构,该扩展还支持以鼠标拖放的方式部署程序集到GAC专用工具GACUtil.exe的/i和/u开关分别用来安装和卸载一个程序集GACUtilGACUtil只能由管理员或只能由管理员或PowerUserPowerUser运行运行如果没有共享的要求,应尽量避免全局部署到GAC中,应尽量使用私有部署全局部署违反了全局部署违反了.NET.NET程序轻量化部署的特点程序轻量化部署的特点发布者策略控制当程序集的开发者创建了一个新版本时,可以通过配置文件来设置版本控制的策略用一个用一个XMLXML配置文件可以让配置文件可以让CLRCLR将以前使用某将以前使用某程序集程序集1.01.0版本的应用重新定向到版本的应用重新定向到2.02.0版本。版本。管理员可以通过修改配置文件忽略这种重定向管理员可以通过修改配置文件忽略这种重定向小结.NET平台基础概念高级语言代码的编译过程高级语言代码的编译过程CLRCLR、CLSCLS、CTSCTS与具体语言的关系与具体语言的关系程序集两种类型的程序集与两种部署方式的关系两种类型的程序集与两种部署方式的关系GACGAC
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号