《2022年ArcGISEngine开发基础之QI .pdf》由会员分享,可在线阅读,更多相关《2022年ArcGISEngine开发基础之QI .pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、ArcGIS Engine开发基础之QI AO开发 中 QI( 接口查询)非常重要,从某种意义上说不会QI 就不会做 AO开发。在讲 ArcGIS Engine 开发 QI实例操作之前 , 以一个现实生活例子以方便大家理解QI。. 首先我先定义三个接口:IZou(走) ,IJingzou (竞走) ,IHeshui (喝水)如下所示interface IZou void start(); void stop(); interface IJingzou : IZou void niupigu(); interface IHeshui void heshui(); 2. 定义一个人类实现 IZou
2、(走) IHeshui (喝水)两个接口class person : IZou, IHeshui void IZou.start()/注:显式接口实现后边会讲到 MessageBox.Show(开始走 ); void IZou.stop() MessageBox.Show(停止走 ); void IHeshui.heshui() 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 8 页 - - - - - - - - - MessageBox.Show(开始喝水 ); 3.
3、 定义一个运动员类继承于人类实现IJingzou 接口class yundongyuan : person, IJingzou void IZou.start() MessageBox.Show(开始走 ); void IZou.stop() MessageBox.Show(停止走 ); void IJingzou .niupigu() MessageBox.Show(开始扭屁股 ); 定义完接口与类,接下来我给大家演示QI 1. 实例化一个 person 类。 IZou pZou = new person(); pZou.start(); IJingzou pJIngzou = pZou a
4、s IJingzou ;/进行 pJIngzou.niupigu();/将会出错如下图所示名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 8 页 - - - - - - - - - 为什么会出现这个错误是因为用new实例化了一个人, 但是并不是所有的人都会竞走的也就是说 Person 这个类没有实现IJingzou 这个接口所以报错。所以做之前必须查看你实例化的类是不是实现了相关接口。. 实例化一个 yundongyuan IZou pZou = new yundongy
5、uan(); pZou.start(); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 8 页 - - - - - - - - - IJingzou pJIngzou = pZou as IJingzou ; pJIngzou.niupigu();/将会执行如下图通过实例化一个 yundongyuan之后我就可以通过IZou 接口直接到Ijingozu这个接口,然后执行Ijingozu接口所提供的方法这就是。3.Ok 我们现在我们再在第二部做个补充,运动员开始扭屁股竞走
6、了,竞走运动员在竞走过程中太渴想喝水怎么办?痛过QI 切换到 IHeshui 接口执行喝水方法即可,如下例IZou pZou = new yundongyuan(); pZou.start(); IJingzou pJIngzou = pZou as IJingzou ; pJIngzou.niupigu();/将会执行IHeshui pHeshui = pJIngzou as IHeshui;/QI到 IHeshui 接口pHeshui.heshui();/运动员将喝水名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整
7、理 - - - - - - - 第 4 页,共 8 页 - - - - - - - - - 上边这个实例演示完,大家对QI 会有所了解,那么如何在ArcGIS Engine开发中使用 QI 呢?接下来我以一个功能实例来演示一下QI 在 ArcGIS Engine开发中的使用。下图在 地图 控件上有两个图层:一个面图层在上,一个是等高线图层在下名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 8 页 - - - - - - - - - 我们实现一个小功能, 让面图层为半透明图
8、层能够看到下边等高线图层,代码如下:privatevoidbutton1_Click(object sender, EventArgs e) / 获取第一个图层ILayer pLayer = this .axMapControl1.get_Layer(0); if (pLayer is IFeatureLayer)/ 如果第一个图层时矢量图层 ILayerEffectspLayerEffects = pLayerasILayerEffects;/进行 QI,查询到ILayerEffects接口 pLayerEffects.Transparency = 65;/设置 ILayerEffects接
9、口的 Transparency属性使该矢量图层的透明度属性为65. 通过以上操作第一个矢量图层有一定的透明度,可以看到面图层下边的等高线线图层,结果如下图所示:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 8 页 - - - - - - - - - 分析:首先地图控件上的第一个图层是一个矢量图层是一个FeatureLayerClass对象,在 ArcGIS Engine 帮助文档可以看到在FeatureLayerClass这个类实现了 ILayer 和 ILayerEf
10、fects这两个接口,那么就可以直接从 ILayer 接口查询到 ILayerEffects接口。大家可能会有这样的疑问:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 8 页 - - - - - - - - - 为什么不直接使用类的全权名直接调用FeatureLayerClass的方法的调用、属性访问?因为 FeatureLayerClass里实现相关接口的方法 , 属性的实现是,以显式接口的方式实现的。例如在第一个实例中如果我们 person pperson = ne
11、w person(); pperson.start();/ 将会编译错误,不能通过类的全权名进行方法的调用,只能用接口实例来访问。接下来可能还有一个疑问:为什么要用显式实现接口的方法?这样做有以下两个目的:. 隐藏类的复杂性因为显式接口成员实现不能通过类或结构的实例来访问,所以它们可以用来隐藏某些成员。 因为接口的成员都是公共的,可以被任意地访问, 所以当想要对外隐藏接口时,就需要使用显式接口成员实现。. 可以用来解决具有相同签名的成员之间的冲突例如 FeatureLayerClass这个类实现了 ILayer 和 IFeatureLayer这两个接口,而这两个接口都有AreaOfInterest属性那么通过显式接口我就可以避免同名发生的混淆。总结,当我们在开发时对某个对象(FeatureLayer,FeatureClass,Element等)进行操作实现功能开发时我们应该先看看你所操作的类实现了那些接口,从帮助中浏览相关接口的功能描述,然后再查询所要调用的方法。如果还需调用另外一个接口操作则进行QI。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 8 页 - - - - - - - - -