深刻理解ESRI ArcGISEngine编程接口跳转的含义
1、何为接口跳转(QI-Querry Interface)
QI是ArcGIS Eingine 开发中的一个重要技术细节,按Querry Interface直译,即为查询接口,但其实质是指从类的一个接口转到另外一个接口。因此,也称为接口跳转。
在学习面向对象编程时,已经知道类可能包含很多属性和方法,需要对这些属性和方法进行归队,每队可定义一个接口。这样每个类就可能包含多个接口,例如Polygon类就包含了Ipolygon、Igeometry和Iarea等许多接口。当开发人员想知道某个多边形的周长时,就必须使用Ipolygon接口下的Length属性。若要想知道面积,则需使用Iarea接口下的Area属性。即在对象(Object)的使用过程中,经常需要在不用接口之间跳来跳去,这就是所谓的接口跳转(QI)。
2、如何QI
下面通过一个具体实例进行说明:
IPolygon pPolygon;
pPolygon = new PolygonClass();
double curveLength;
curveLength = pPolygon.Length;
IArea pArea;
pArea = pPolygon as IArea;//这里发生了QI
double shapeArea;
shapeArea = pArea.Area;
3、QI的实质
IPolygon和Iarea明明是两个接口,为何在QI时写:
pArea=pPolygon as IArea;
上述语句之所以合法,需要理解接口变量,通过语句:
IPolygon pPolygon;
就申明了一个名为pPolygon的接口变量,接口变量实质就是用于存放某个内存地址的变量,但又和一般的地址变量不同,因为在使用接口变量时必须符合该接口的规范。
通过语句:
pPolygon=new PolygonClass();
接口变量pPolygon就存放了PolygonClass()对象在内存中的首地址,可以理解为pPolygon指向了某Polygon对象。并且在使用pPolygon变量时,必须符合IPolygon接口的规范,比如只有Length属性,而没有Area属性,且Length属性为只读(所谓接口,其实就是一种规范而已)。
语句:
pArea = pPolygon as IArea;
就是把某Polygon的首地址赋给pArea,但pArea变量的使用由必须符合IArea接口的规范。
因此所谓QI就是把某对象的内存首地址赋给不同的接口变量,以便根据不同的接口规范去访问不同的属性和方法。