深刻理解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就是把某對象的內存首地址賦給不同的接口變量,以便根據不同的接口規範去訪問不同的屬性和方法。