從Net+Engine,本來以為不是很難,但是我卻錯了,我們知道AE開發也就意味著介面編程,而AE中的東西也就是AO,這個是構建在com之上的,當我們用Net開發,那麼就存在net和com的互動,這些都有相應的互操集(ESRI provides primary interop assemblies for all the ArcObjects type libraries that are implemented with COM)。一個類可以實現多個介面,每一個介面負責管理屬於自己的方法,那麼介面編程也必然存在著從一個介面到另一個介面的訪問,也就是QI,在C#中,這種很容易做,直接做一個類型轉換就OK了
而在C#中是不能用類的。
java中的通訊也肯定有一個互操作集,也就是COM Interop Bridge而對於java(ESRI are using third-party software (J-Integra: http://j-integra.intrinsyc.com/) to automagically generate a bridge between Java and their COM libraries.)。Java中也就必然存在介面QI,而這個是由代理類來完成的,在Java中多了一個IXXXproxy的東西,這個是類而不是我們在c#中說到的介面。
而在Java中可以使用類來編程,這可能是因為Java中的介面轉換比較麻煩吧!既然IXXXproxy是類,這裡面肯定要有建構函式,不然對象怎麼產生,而IXXXproxy的預設的建構函式是不允許我們使用的,只能內部使用
[C#]
IPoint point = new PointClass();if (point is IGeometry){ IGeometry geometry = (IGeometry)point; Console.WriteLine(geometry.GeometryType.ToString());}
在Java中
IGeometry iGeometry = new IGeometryProxy(iPoint);