接口查询(QI)心得

Technorati 标签: arcgis, QI, 接口查询

ArcObjects开发基础与技巧 for VB.NET》中提到:

Dim pGraphicsContainer As IGraphicsContainer
pGraphicsContainer=pActiveView.FocusMap
pGraphicsContainer '对象现在可以使用的属性和方法就只能是IGraphicsContainer接口定义的那部分,而不能使用其他接口定义的方法和属性,那如何使用其他接口定义的属性和方法呢?这就是所谓的QI(Query InterFace)功能,即从对象的一个接口查询另一个接口定义的属性和方法,如:
Dim pActiveView as IActiveView
pActiveView=pGraphicsContainer'通过上面的操作,pActiveView现在就可以使用MAP类中IActiveView接口定义的属性和方法了,这就实现了在一个类的不同接口之间的转换 

Map类实现了IGraphicsContainer和IActiveView接口,这两个接口都只能使用Map类的一部分属性和方法(也就是实现该接口时需要的属性方法)。那么通过IGraphicsContainer来得到IActiveView就是QI。


举个例子,类ClassA实现了接口Ia1,Ia2 :

Ia1 a1=new ClassA( );    //在内存中开辟了一个空间用于新建ClassA( ),所需空间的大小仅与类有关,与接口无关。
 
 
la2 a2=new ClassA( );   //重新开辟了一个空间来新建类。a2可以使用对应于Ia2接口的方法。

但新建的这两个对象是独立的,对第一个对象仅能使用Ia1的方法对其进行管理;对于第二个对象仅能使用Ia2的方法对其进行管理。显然,这不是我们想要的。这时就可以进行接口查询。

Ia1 a1=new ClassA( );   //新建一个对象
Ia2 a2=a1 as Ia2;       //QI,a2与a1同时指向上一句所新建的对象,用各自接口中的方法对该对象进行管理。

转载于:https://www.cnblogs.com/yaoaijia/archive/2008/10/26/1319721.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值