AE开发_01_COM组件与接口

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

AE开发COM组件与接口小节内容COM组件对象模型简介如何使用COM类接口Interfaces多态Polymorphism接口查询QueryInterface测试一个对象的引用的常用方法Isitnothing?Whattypeofobjectisit?COM简介COM是创建类的一个标准COM类可以在不同的工程中重用不依赖于具体的开发语言所有的ArcObjects都是COM类ArcObjects基于COM技术构建对象连接与嵌入技术(OLE)OLEDB技术ActiveX技术是COM技术的一种封装DCOM和COM+COM类拥有接口对象拥有一个或多个接口接口是定义了一组方法和属性的逻辑关系与对象的通信是通过接口来进行的RaceCarAccelerateBrakeFuel停靠站圈速度IRaceIDrive垃圾车加速刹车燃料拾起倾倒IGarbageIDrive通信契约——接口接口的秘密接口可以被看做一种定义了必要的方法和属性的类型。作为类型而存在,是类型(Class)一般行为的定义和契约。VehicleClass加速刹车燃料IDrive启动接口的作用定义多个类型都需要的公共方法和属性。作为一种不可实例化的类型存在。在讨论COM接口时,COM规范(微软,1995)着重强调以下四点:接口不是类。接口不能实例化自身,因为其上没有实现。接口不是对象。接口是一个相关功能组,是客户和对象之间通信的二进制标准。接口具有很强的类型性。每个接口都有自己的接口标识符,因此消除了具有人们易读相同名字接口间可能的冲突。接口是不变的。接口从来没有版本。一旦接口被定义和公布就不能改变。COM接口使用一个接口指向一个COM类someinterfacevariable=newcoClass接口集合了属性和方法IDrivepGarbage=newGarbageTruck();pGarbage.Fuel=Full“;pGarbage.Accelerate();使用ArcObjectsCOM类GarbageTruckAccelerateBrakeFuelPickUpDumpIGarbageIDrive更多的接口例子…一个组合音响的例子一个对象可以播放收音机、磁带、CD必须使用适当的接口如果选择了播放磁带的接口,则不能收听收音机IRadioITapeICDITapepBBox=newBoomBox();pBBox.FM=true;//errorIDrive燃料加速刹车多态许多不同的类可以支持相同的接口拥有相同的所有的方法和属性可以有不同的执行方式和拥有不同的属性值多态ArcObjects多态许多ArcGIS的类都表现出多态的特性所有的子类都是集成了接口ILayer:Alllayertypes(raster,tin,feature,etc.)IGxFile:AllArcCatalogfiletypes(shapefile,map,table,etc.)IActiveView:Map(dataview)andPageLayout(layoutview)Severalothers…使用接口的属性和方法定义一个指向接口的遍历实例化一个对象调用方法和设置属性只能使用定义的接口的属性和方法//CreateanewRaceCarwithIDriveIDrivepCar=newRaceCar();pCar.Accelerate();pCar.Fuel=Full“;pCar.PitStop();//可以吗?RaceCarAccelerateBrakeFuelPitStopLapTimeIRaceIDrive//CreateanewRaceCarwiththeIDriveinterfaceIDrivepCar=newRaceCar();pCar.Accelerate();//SwitchinterfacesIRacepRace=pCarasIRace;pRace.PitStop();pCar.Accelerate();//pCar和pRace指向相同的对象**取得其他的接口接口查询(QI)访问其它接口的属性和方法RaceCarAccelerateBrakeFuelPitStopLapTimeIRaceIDrive使用类库命名空间许多类库中有相同的类名和接口名可以明白地引用对象库在EsriCore库中创建一个新的点和线对象ESRI.ArcGIS.esriCore.IpointpPoint=newPoint();ESRI.ArcGIS.esriCore.IlinepLine=newLine();使用ESRIObject浏览器列表类、接口、属性和方法位置:ArcGISinstallationfolder\ArcGIS\DeveloperKit\tools\EOBrowser.exeis判断•检查对象是否与给定类型兼容。•如果所提供的表达式非空,并且所提供的对象可以强制转换为所提供的类型而不会导致引发异常,则is表达式的计算结果将是true。否则为false。if(layerisIFeatureLayer){}as转换•as运算符用于在兼容的引用类型之间执行转换。•如果无法进行转换,则as返回null而非引发异常。expressionastype等效于:expressionistype?(type)expression:(type)nullIFeatureLayerftrLayer=layerasIFeatureLayer;”non-creatable”类对象的创建•non-creatable类不能直接采用new创建对象实例。•必须通过类提供的创建函数或者其他类的创建方法来创建。•比如:FeatureClass类是non-creatable类,通常通过FeatureWorkspace来创建。FeatureClass对象创建IWorkspaceFactoryworkspaceFactory=newESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();IFeatureWorkspacefeatureWorkspace=(IFeatureWorkspace)workspaceFactory.OpenFromFile(dataPath,0);IFeatureClassfeatureClass=featureWorkspace.OpenFeatureClass(nameOfShapefile);推荐的学习方法•看ArcEngine帮助文档•分析ArcEngine的示例程序•多练习问题•如何获取图层中某一个要素的某一个字段的信息?•GIS查询有哪几种?•如何进行查询?

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功