ArcObjects GIS应用开发-基于C#chap.1_第1页
ArcObjects GIS应用开发-基于C#chap.1_第2页
ArcObjects GIS应用开发-基于C#chap.1_第3页
ArcObjects GIS应用开发-基于C#chap.1_第4页
ArcObjects GIS应用开发-基于C#chap.1_第5页
已阅读5页,还剩149页未读 继续免费阅读

下载本文档

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

文档简介

GIS应用开发DevelopingGISApplicationswithArcObjectsusingC#.NET江西省研究生优质课程主讲:兰小机GIS博士、教授

Email:landcom8835@163.com

QQ:305333315课件:4/

兰小机简历主要经历1988年7月毕业于南方冶金学院工程测量专业,获学士学位,并留校任教1994年6月毕业于武汉测绘科技大学工程测量专业,获硕士学位,回校任教2005年6月毕业于南京师范大学地图学与地理信息系统专业,获理学博士学位,回校任教主要研究方向GML空间数据挖掘GML空间数据库理论与GMLGIS空间数据集成与共享GIS应用开发科研项目国家自然科学基金项目--面向GML的时空关联规则及序列模式挖掘研究(编号:40971234),35万元,主持国家自然科学基金项目--本原GML空间数据库理论及GMLGIS与传统GIS集成研究(编号:40761017),16万元,主持国家自然科学基金项目--GML空间数据存储索引机制研究(编号:40401045),26万元,排名第二地理信息科学江苏省重点实验室开发基金项目--面向对象的GML空间数据库及其应用研究(编号:JK20050302)

,5万元主持江西省教育厅科技项目—GML空间数据库理论及GMLGIS研究,1万元,主持萍乡市基础地理信息系统研究与开发,22万元,主持城市公众地理信息服务系统研究与开发,10万元,主持教学目标《GIS应用开发》课程是GIS本科生、研究生重要的专业课程,通过课程的学习,了解ArcGIS软件体系结构及ArcObjects组件构成,并能熟练使用ArcObjects进行应用型GIS开发;掌握应用型GIS开发的基本思路、技术方法.教学内容及时间安排序号教学内容学时1开发基础

52ArcGISApplicationframework

53使用ArcObjects控件编程

64几何形体对象--GEOMETRY

45地图的组成

66空间数据的符号化

57空间数据管理

58地理处理框架29空间分析410空间数据编辑811三维GIS开发基础6教材及参考材料教材:《基于ArcObjects与C#.NET的GIS应用开发》,兰小机等编著,冶金工业出版社,2011年12月最新课件参考材料:ArcObjectsSDK10Microsoft.NETFramework//zh-cn/arcgisdesktop/10.0/help/ArcGIS开发工具包中的文档,包括ArcGIS开发帮助、组件帮助、对象模型图和示例学习基础熟练掌握ArcGISDesktop(ArcMap、ArcCatalog)基本操作;了解Geodatabase、ArcSDE基本概念;会用C#进行程序设计。课程考核开发一个小型的GIS应用系统,按GIS软件工程的要求进行设计,并提供完整的设计开发方案,开发的小系统应具备GIS的基本功能,主要包括:打开、保存地图文档、添加数据自定义命令、工具、菜单空间数据符号化空间数据管理空间查询与空间分析空间数据编辑功能:基本编辑功能、高级编辑功能计算机组件技术组件GIS组件式的GIS应用开发Chap.1FundamentalsofdevelopingwithArcObjectsArcGIS系列产品与开发方式ArcGISVisualStudioIDEIntegrationFrameworkArcObjects基础组件对象模型.NET平台概述.NET组件与COM组件的互操作ArcGIS开发资源§1

ArcGIS系列产品与开发方式ArcGISDesktopArcGISEngineArcGISServerArcGISMobile开发类型:

TocustomizeorextendtheArcGISDesktopapplicationsTo

buildstandalonemappingapplicationsTodevelopWebapplications

§1.1

ArcGISDesktop及其扩展ArcGISDesktop是GIS专业人员编辑、使用和管理地理信息的主要平台,它按功能分为三个不同级别的产品:

ArcViewArcEditorArcInfo每个产品主要包括:ArcMap、ArcCatlog、ArcGlobe、ArcScene桌面应用程序.ArcGIS桌面应用程序定制/扩展方式使用ArcGIS桌面应用程序的定制功能(Customzie),配置应用程序界面;使用Python脚本,自动化GIS工作流开发插件(add-in),定制/扩展ArcGIS桌面应用程序开发定制组件,扩展ArcGIS桌面应用程序无需使用ArcObjects,后续版本不支持VBA定制需要使用ArcObjects,可以使用C#,VB.NET,Java,

C++语言§1.1.1使用Python脚本,自动化GIS工作流Python是一种免费的、跨平台的开源编程语言,它功能强大且简单易学,因而得到了广泛应用和支持。ESRI已将Python完全纳入ArcGIS中,成为了一种用于数据分析、数据转换、数据管理和地图自动化的语言,因而有助于提高工作效率。易于学习,非常适合初学者,也特别适合专家使用可伸缩程度高,适于大型项目或小型的一次性程序(称为脚本)可移植,跨平台可嵌入(使ArcGIS可脚本化)稳定成熟用户社区规模大ArcGIS中的PythonPython是地理处理框架的重要组成Python在ArcGIS中的发展ArcPyArcPy--ArcGIS新的Python库由arcgisscripting升级而来包含有函数(Function)、类(Class)和模块(Module)功能实现能访问所有gp工具数据转换、数据管理数据分析自动化制图ArcPy详细参考:

ArcGIS

Desktop

10帮助—专业库—地理处理—ArcPy站点包ArcPy模块模块为通常包含函数和类的Python文件。有一系列模块支持ArcPy,包括制图模块(arcpy.mapping)、SpatialAnalyst模块(arcpy.sa)和GeostatisticalAnalyst模块(arcpy.ga)。ArcPy类ArcPy类,如SpatialReference和Extent类,通常用作地理处理工具参数设置的快捷方式,否则的话,这些参数会使用更加复杂的字符串。ArcPy函数函数是用于执行某项特定任务程序单元。在ArcPy中,所有地理处理工具均以函数形式提供,但并非所有函数都是地理处理工具。除工具之外,ArcPy还提供多种函数来更好地支持Python地理处理工作流。函数或方法可用于列出某些数据集、检索数据集的属性、在将表添加到地理数据库之前验证表名称,或执行其他许多有用的脚本任务。独立的Python脚本Python脚本是可以执行的.py文件。独立Python脚本可通过两种方式执行:通过操作系统提示或开发应用程序(如PythonWin),或在Windows资源管理器中双击.py文件。Python脚本工具Python脚本工具是已添加到地理处理工具箱的Python脚本。添加为脚本工具后,便可以像使用其他地理处理工具一样使用此脚本工具-可以从工具对话框打开和执行、可以在Python窗口和ModelBuilder中使用,并可以从其他脚本和脚本工具中调用。Python窗口ArcGIS10使用Python窗口代替原来的命令行窗口,

通过Python窗口,用户可以快捷地在ArcGIS内部使用Python,从而以交互方式运行地理处理工具和功能以及充分利用其他Python模块和库。此窗口还为用户学习Python提供了一个途径。Python窗口提供了智能感知和代码自动完成功能.可以直接从Catalog中拖放过来即时的帮助信息简单实例:ArcGIS引入了后台地理处理(Background

Geoprocessing)的概念,允许Geoprocessing工具、ArcGIS操作同时运行(使用多核CPU)。§1.1.2使用DLL组件扩展ArcGIS桌面使用DLL组件扩展ArcGIS桌面的优势:Theycanbeeasilydeliveredtoendusersviacustomsetupprograms.Youcanhideyourcodeandlogicinabinaryfile.YoucanextendandcustomizevirtuallyeveryaspectoftheArcGIStechnology.使用DLL组件扩展ArcGIS桌面开发插件(add-in),定制/扩展ArcGIS桌面应用程序(NewinArcGIS10)开发定制组件,扩展ArcGIS桌面应用程序ArcGISDesktopAdd-inAdd-in是一种能够快速扩展桌面应用程序功能的全新扩展方式更加容易创建更加容易共享更加安全更易安装管理ArcGIS

10Add-in所支持的类型按钮和工具组合框菜单和右键菜单Multi-items工具条Toolpalettes可停靠窗体ApplicationextensionsEditorextensionsArcGIS

10Add-in支持的开发环境VisualStudio2008+.Net3.5VisualStudio2010+.Net3.5或者.Net4.0VisualBasic/C#

2008ExpressEdition+.Net3.5VisualBasic/C#2010ExpressEdition+.Net3.5或者.Net4.0EclipseIDEforJavaDevelopersXMLMetadata(

Config.esriaddinx)Add-in的部署复制/邮件发送编译好的esriaddin文件到需要部署机器上(已经安装好ArcGIS桌面);在部署机器上双击esriaddin文件,弹出Add-in安装界面,让用户查看该插件的一些元信息,然后让用户决定是否安装该插件;安装插件是不需要重启任何ArcGISDesktop应用程序的。安装完之后,就可以通过相应ArcGISDesktop应用程序的Add-inManager来查看已安装的Add-in,也可以通过它来卸载。一些Add-in所包含的对象,例如Command、Tool、Toolbar,是需要用户通过Customize窗口定制添加到界面上的。Extension对象,则需要用户通过Extensions窗口勾选加载。Add-in共享与安全实现局域网内共享设置共享目录、设置安全级别Add-in数字签名工具:ESRISignAddin.exeC:\ProgramFiles\CommonFiles\ArcGIS\bin\ESRISignAddIn.exe§1.2

ArcGIS

Engine

ArcGISEngine是一个完整的嵌入GIS组件库和工具,开发人员可以用来创建新的独立的GIS应用程序或者在自定义的应用程序或已经存在的应用程序中嵌入GIS功能。ArcGISEngine是ArcObjects的子集,主要用于独立的GIS应用开发,它不依赖于ArcGISDesktop。ArcGISEngine由两部分组成:一个软件开发包(SDK)和一个可分发的运行时(Runtime)。除此之外,应用程序的功能可以使用可选的扩展模块来进行扩展。ArcGISEngine支持Windows平台及跨平台开发。Windows平台开发,有以下APIs:.NETVC++跨平台开发,有以下APIs:JavaC++forWindowsC++forSolaris/Linux使用ArcGISEngine控件开发独立的GIS应用UsingtheWinformsArcGISEnginecontrolsUsingArcGISEngineControlsinWPF(NewinArcGIS10)§1.3

ArcGISServerArcGISServer是功能强大的基于服务器的GIS产品,用于构建集中管理的、支持多用户的、具备高级GIS功能的企业级GIS应用与服务。

开发者使用ArcGISServer可以构建Web应用、Web服务、以及其它运行在标准的.NET和J2EEWeb服务器上的企业应用。

ArcGISServer包含两个主要部分:GIS服务器和多种的开发框架。ArcGISServer提供的开发环境:ArcGISServerSDKfor.NETandJavaArcGISJavaScript

APIArcGISJavaScriptextensionfortheGoogleMapsAPIArcGISJavaScriptextensionforBingMapsArcGISAPIforMicrosoftSilverlight/WindowsPresentationFoundation(WPF)ArcGISAPIforFlexArcGISServerRepresentationalStateTransfer(REST)APIArcGISServerSimpleObjectAccessProtocol(SOAP)SDK§1.4

Mobile

GISArcGIS技术可以部署到一系列的移动设备上,从轻量级的设备到PDA、笔记本电脑以及平板电脑。在野外工作中使用GIS,主要依靠将应用程序定制成简单的移动工作任务以及对中心GISWeb服务器的无线访问。ArcGIS为用户提供了三种移动GIS解决方案。ArcGISDesktop和使用ArcGISEngine建立的应用程序:这种方案常常部署在用于野外的笔记本电脑或者平板电脑上。ArcPad:ArcPad为使用WindowsCE兼容设备的野外工作人员提供了一个以GIS为中心的解决方案。ArcGISMobile

SDK:ArcGISServer包含的一个软件开发包,可以被用于智能手机、PocketPC等设备上的应用开发。§2

ArcGISVisualStudioIDEIntegrationFramework为了提高软件开发效率,ArcGIS开发包为开发人员提供了集成于VS环境的模板、向导、命令、代码段等。ArcGIS开发包的安装ArcGIS桌面开发包—ArcObjects(AO)ArcGISEngine开发包--ArcGISEngine(AE)ArcGISServer开发包ArcGIS开发包安装后VS

IDE集成框架(开发环境元素)开发类库开发文档ArcGISVisualStudioIDEIntegrationFrameworkArcGISVisualStudioIDEIntegrationFrameworkforadd-ins(New

in

ArcGIS

10)ArcGISVisualStudioIDEIntegrationFrameworkforextendingArcObjectsArcGISVisualStudioIDEIntegrationFrameworkforserverobjectextensionsWeb

MappingApplication§2.1ArcGISVisualStudioIDEIntegrationFrameworkforadd-ins在VS环境下开发:创建解决方案(Solution)一到多个项目(Projects)一到多个类(Classes)§2.2ArcGISVisualStudioIDEIntegrationFrameworkforextendingArcObjectsArcGISVS

IDE集成框架元素:ArcGISProjecttemplates(项目模板)ArcGISProjectwizardArcGISItemtemplates(类模板)ArcGISAddClasswizardArcGISSnippetsArcGISReferencedialogboxArcGISComponentCategoryRegistrardialogboxArcGISLicenseInitializerdialogboxArcGISToolboxReferencedialogboxArcGIS.NetCodeConverterToolboxconfiguration§2.1

ArcGISProjecttemplates(项目模板)Thefollowingaretheavailableprojecttemplates:Desktop:WindowsApplicationConsoleApplicationClassLibrary(General)ClassLibrary(ArcMap)ClassLibrary(ArcCatalog)ClassLibrary(ArcScene)ClassLibrary(ArcGlobe)Engine:WindowsApplicationConsoleApplicationClassLibrary(General)MapControlApplicationGlobeControlApplication

serverobjectextensionsRESTSOAPServerWebApplicationWebMappingApplicationToolboxconfiguration:AddsArcGIScontrolsintheVisualStudioToolboxwindow.ArcGISProjectwizard(项目向导)当使用ArcGIS项目模板来创建一个新项目时,

ArcGIS项目向导会自动打开,通过自动添加ArcGIS引用及许可初始化代码,来帮助你高效地搭建新的ArcGIS定制项目。Class

Library

(ArcMap

)Windows

Application

(Desktop)WindowsApplication(Engine)§2.3

ArcGISitemtemplatesAdd-in组件模板类模板ArcGISAddClass(最通用的类模板)

Wizard当选择“ArcGIS

Class”模板后,添加类向导会自动显示,指导你完成类的创建。ArcGISAddClassWizardincludethefollowing3steps:BaseImplementationoptionComponentCategoryoptionOptionalInterfacesoptionBaseImplementationoptionCustomizationgroupBasecomponentComponentCategoryoptionCategoriesCategorypropertiesOptionalInterfacesoptionAvailableoptionalinterfacesSelectedinterfaces§2.4

ArcGISReferencedialogbox§2.5

ArcGISComponentCategoryRegistrardialogbox§2.6ArcGISLicenseInitializerdialogbox不管是ArcGIS桌面应用程序还是独立的GIS应用程序,在访问ArcObjects组件之前,需要明确地使用合适的ArcGIS产品许可进行初始化。开发人员可以使用“ArcGISLicenseInitializerdialogbox

”来产生并添加许可初始化代码到项目中的适当位置。但如果选用项目模板,创建过程中包含选择合适的产品许可选项。§2.7ArcGISToolboxReferencedialogboxThisdialogboxallowsyoutocreateamanagedassemblyforacustomArcGIStoolbox,withoneclassrepresentingeachgeoprocessingtoolinthetoolbox.Youcanthenusetheseclassestosetupandrungeoprocessingtools.

§2.8

SnippetsinArcGISfor.NETdevelopers为了帮助ArcGIS软件开发人员进一步提高软件的开发效率,“ArcGISVisualStudioIDEIntegrationFramework”提供了可重用的代码段供开发人员使用。ArcGIS10offersafullyintegratedArcGISSnippetinsertionandfindertool.C:\ProgramFiles\MicrosoftVisualStudio10.0\VC#\Snippets\ArcObjectsVS--工具--代码段管理器(T)…使用代码段管理代码段编辑、重建、查找代码段ArcGIS

Snippet

Editor

ManagerArcGIS

Snippet

Editor

WizardArcGIS

Snippet

Finder在VS中根据已有代码生成Snippet§2.9

Walkthrough:CreateacommandbyinheritingfromBaseCommandCreateasimplecommandthatzoomstheextentoftheselectedlayerCreateanewclasslibraryAddreferencesCreateaZoomToLayercommandChangethedefaulticonbitmapInherittheBaseCommandabstractclassAddcodetotheoverriddenconstructorofBaseCommandAddtheZoomToLayerfunctionalityExposetheZoomToLayerclasstoCOMCompiletheprojectUsethecommandinArcMapDebuggingthecommandDemo:CreatingacommandthatzoomstheextentoftheselectedlayerSnippets§3

ArcObjects基础ArcObjects简介ArcObjects的组件库理解对象模型图§3.1ArcObjects简介ArcObjects是ESRI公司ArcGIS系列产品的开发平台,它是基于MicrosoftCOM技术所构建的GIS组件产品,是一套可重用的通用的二次开发组件产品,它可以用于大量开发框架中,包括流行的像

.NET、VisualC++、Java等开发环境。ArcObjects不是为最终用户而是专门为开发人员提供的二次开发组件。ArcObjects是ArcGIS系列产品的基础,大部分ArcGIS产品都是由ArcObjects构建的。§3.2

ArcObjects的组件库ArcObjects是一套庞大的COM组件集合,ArcGIS各版本各种COM类型统计见下表:

EnumsStructsInterfacesClassesTotalArcGIS9.0

628

35

3029

2322

6014

ArcGIS9.1933

36

3918

3043

7930

ArcGIS9.21100

40

4798

3832

9770

ArcGIS9.3

1195

51

5206

4050

10502

ArcGIS10.01053935555408110782为了更好地管理ArcObjects中数目众多的COM对象,ESRI将它们放置在不同的组件库中,对于.NET来说,一个组件库就是一个assembly(程序集),一个assembly有多个不同的命名空间。如ESRI.ArcGIS.ADF

Assembly的Namespaces:ESRI.ArcGIS.ADF

ESRI.ArcGIS.ADF.BaseClasses

ESRI.ArcGIS.ADF.CATIDs

ESRI.ArcGIS.ADF.COMSupport

ESRI.ArcGIS.ADF.Resources

ArcObjects

10的组件库共65个(65

assemblies),详细内容参见LearningArcObjects、ArcObjects

SDK

API

Reference如果不记得某个接口或对象属于哪个命名空间的时候,可以通过开发帮助查找。§3.3

理解对象模型图ESRI提供了多种方法让用户了解ArcObjects组件及不同组件之间的关系ESRI提供的一系列OMD的PDF文件开发帮助、API

ReferenceVS.NET中的对象浏览器通过阅读ArcObjects的对象模型图(ObjectModelDiagram,OMD),可以快速了解ArcObjects的结构和不同组件之间的关系。OMD使用UML(UnifiedModelingLanguage,统一建模语言)描述,它补充了在对象浏览器中看不到的信息,可以帮助程序员了解类之间的关系,如何从一个类到另一个类,选择正确的接口,获取需要的属性和方法等。VS中的对象浏览器§3.3.1类与对象在ArcObjects中存在三种类型的类:抽象类(AbstractClass)组件类(CoClass)普通类(Class)抽象类不能用于产生一个新的对象,但是可以用于定义一个子类。组件类是一个可以直接用new创建对象实例的类,它的实例对象不依赖其他对象的存在而存在,其生存周期也不用其他的对象管理。普通类不能够直接产生一个对象,但它可以用其他的普通类或组件类的方法产生,而不是使用new关键字来完成。§3.3.2

类与类的关系ArcObjects的类之间存在四种关系依赖关系关联关系组合关系类型继承

WorkspaceFactoryWorkspaceMapControlMapMapLayer*CurveSegmentPathPolyCurve§4

组件对象模型软件开发历史什么是组件对象模型§4.1软件开发历史软件重用和开发效率始终是软件开发的核心问题。在早期(面向过程语言),人们为了重用,将一些基本的数学计算函数和界面设计函数设计成函数库,让其他软件开发人员调用。它为应用开发者提供了方便,但是重用的粒度太小。面向对象语言的出现,提高编程的粒度。面向对象语言的基本单位是类,它封装了数据成员和函数成员,将最小组件的粒度提高了一个等级。但是,一个类提供了很多种方法和属性,使用和管理很不方便。COM技术(接口)的出现,解决了以上问题,将类的内部属性和方法进行分类。例如在Map类中有好几个接口,在这些接口中定义不同功能组的方法和属性,Map实现了这些接口,这样就可以使用接口进行定义。但COM也存在一个严重的问题:DLL灾难。.NET技术的出现解决了“DLL灾难”问题。§4.2

什么是组件对象模型组件技术标准COM(DCOM):微软的组件对象模型((Distributed)ComponentObjectModel)JavaBean:Sun公司的基于Java的组件技术CORBA:对象管理组织(ObjectManagementGroup,OMG)的组件技术标准,公共对象请求代理结构(CommonObjectRequestBrokerArchitecture,CORBA)。COM知识要点COM是一种二进制级别的组件通信标准--接口(Interface),它定义了组件之间应该如何通信、一个COM对象之间的不同接口如何查询等。COM对象也是基于面向对象标准的。COM对象可以以DLL或者EXE文件形式存在,它包含着接口的具体实现。使用者可以通过接口来访问它内部的方法、属性。COM对象必须实现IUnknown接口,它负责管理COM对象生命周期并在运行时刻提供类型查询,当COM对象不使用的时候,是这个接口定义的方法负责释放内存。

QI(QueryInterface),即所谓查询接口由于一个COM对象有很多个接口,不同的接口管理着COM的不同类型的方法、属性,因此从一个接口可以使用的属性方法转到另一个接口可以使用的属性方法的过程称为QI。这个过程也是由IUnknown接口管理的。

IMappMap;IActiveViewpActiveView; pMap=axMapControl1.Map;//获取控件中的地图

……

pActiveView=pMapasIActiveView;//QI(Or

pActiveView=(IActiveView)pMap;)

………每个组件都有一个独一无二的标识GUID。接口的GUID称为IID,而组件类的GUID称为CLSID。CLSID还有一个文本别名,即所谓的ProgID,它是一个由项目名加组件类类名组成的字符串。一个COM对象可以有多个接口,一个接口也可以被多个COM对象实现。接口分为两种,即内向接口和外向接口。内向接口(InboundInterface)是组织COM对象相关的方法和属性,COM对象必须实现所有的接口内容;外向接口(OutboundInterface)是用于组织COM对象相关的事件,开发人员根据需要实现事件接口。接口可以从多个父接口继承(C#类呢)接口继承机制是非常有用的,在很多时候程序员可以将一个子接口类型的对象定义为父接口类型的对象,从而实现一般化的操作,如:PrivatevoidCreateGeometry(IPolygonpPolygon)PrivatevoidCreateGeometry(IGeometrypPolygon)COM对象的接口一旦被公布,就不能再修改,但可以增加新接口,在ArcObjects中有很多以“2”、“3”结尾的接口,都是这样发展的产物。COM组件必须被注册后才能使用。COM的缺陷:由于COM对象可以被重用,这样多个程序可能共用一个COM对象,如果这个COM组件升级了,就很可能出现其中某个程序无法使用新组件,导致程序不能运行的情况,这种情况被称为“DLLHELL”(DLL灾难)。§5.NET平台概述针对Windows平台存在的缺陷,微软提出了全新的.NET技术体系,其主要包括

.NETFrameworkVisualStudio.NETVisualStudio.NET是一套完整的开发工具,用于生成各种类型的应用程序,包括ASPWeb应用程序、XMLWebservices、桌面应用程序和移动应用程序。.NETFramework是生成、部署和运行各种应用程序的平台。.NETFramework具有两个主要组成部分:通用语言运行时(CommonLanguageRuntime--CLR),是.NETFramework的基础.NETFramework类库。

.NETFramework体系结构OperatingSystemCommonLanguageRuntime(CTS,JIT,MemoryManagement)BaseClassLibrary(System.IO,System.Drawing,System.Threading)DataClasses(ADO.NET,XML,SQL)WindowsFormsWebApplicationsWebServicesWebFormsASP.NETMobileCommonLanguageSpecificationVBC++C#J#…OperatingSystemCommonLanguageRuntime(CTS,JIT,MemoryManagement)BaseClassLibrary(System.IO,System.Drawing,System.Threading)DataClasses(ADO.NET,XML,SQL)WindowsFormsWebApplicationsWebServicesWebFormsASP.NETMobileVisualStudio.NET§5.1通用语言运行时(CLR)通用语言运行时管理内存、线程执行、代码执行、代码安全验证、编译以及其他系统服务。CLR处于.NETFramework的最底层,是.NETFramework的基础,它为C#.NET、VB.NET、C++、J#等多种语言提供了统一的运行环境,使得用某种高级语言编写的应用程序可以在不同的操作系统和硬件上运行,而不需要按照特定环境重写应用程序。

.NET环境下程序编译执行过程TraditionalCompilation:SourceCodeLanguageCompilerNativeEXEDLLCompilationExecutinginOSExecutionCompilationandExecutionin.NETSourcecodeCompilerVB.NETC++C#CompilerCompilerOperatingSystemServicesCommonLanguageRuntimeJITCompilerNativeCodeAssembliesManagedcodeILCode+MetadataILCode+MetadataILCode+MetadataUnmanagedComponentGarbageCollector具体的运行过程:使用VB、C#或任一种CLR支持的编程语言编写应用程序源代码由编程语言对应的编译器将源代码翻译成一个程序集(Assembly)--.NET组件,为一EXE或DLL文件。这个程序集包括中间语言MSIL代码、元数据和一个文件清单。MSIL代码也简称IL代码,其特点是独立于特定操作系统和硬件平台。元数据详细描述了MSIL代码正确执行所需的各种相关数据类型,包括描述Assembly的信息,描述类型的信息,描述其它属性的信息等。这样就使.NET应用程序代码具备了自描述特性。清单则列出了程序集中的所有文件和软件组件,同时指出了CLR在哪里可以找到应用程序运行时需要的其它组件。CLR加载IL代码,同时收集有关应用程序的事实信息。即时编译器JIT将IL代码动态编译成可执行的本机代码。不同的机器使用不同的JIT编译器,所以同一个应用程序的MSIL代码经不同机器的JIT编译器编译之后,便可以在不同的机器上执行。SinglefileassemblyMulti-fileassembly通用类型系统CLR借助通用类型系统(CommonTypeSystem,CTS)对代码类型进行严格的安全检查,避免了不同组件之间可能存在的类型不匹配的问题。§5.2

.NETFramework类库.NETFramework类库(FCL)是一套软件组件,用于编写在CLR控制下运行的代码。类库分级组成了一个庞大

温馨提示

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

最新文档

评论

0/150

提交评论