深刻理解ESRI ArcGISEngine编程接口跳转的含义

深刻理解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就是把某对象的内存首地址赋给不同的接口变量,以便根据不同的接口规范去访问不同的属性和方法。

原文地址:https://www.cnblogs.com/aipingniu/p/6014814.html