zoukankan      html  css  js  c++  java
  • ArcEngine

    ArcEngine开发感想 (2006-12-12 17:27:29)
     
    ArcEngine开发感想

                  ()  

     AO开发已经有一段时间了,AO开发的模式也有一定的了解了!AOESRI开发的一组COM的集合,利用它用户可以进行二次开发,以快速建立满足自己要求的GIS应用.

    AO开发就是利用一些类和这些类的接口进行开发.

    1、抽象类,类,和组件对象类

       抽象类是不能实例化的,抽象类中是一系列抽象的方法,故是不能实例化的,它只能被继承。不同的类可以继承同一个抽象类,但内部对同一方法的实现可能是不一样的。如AO中的接口都是抽象类。用户可以在类中实现这些接口,也就是继承这些接口。如用户可以在自己的类中实现ICommand接口,生成一个Command,或者实现ICommandITool接口,生成一个Tool.

       类是不能直接实例化的,它只能作为另一个类的属性或者被其它类的对象实例化。如Sde3Workspace ClassSde4Workspace ClassFeatureClass,FeatureDataset它们是不能通过New直接实例化的,只能通过SdeWorkspaceFactory CoClass这个组件对象类所实现的IWorkspaceFactory接口里的Open方法来实例化。FeatureClass,FeatureDataset也是不能直接实例化的,他只能通过IFeatureWorkspace接口里的CreateFeatureClassCreateFeatureDataset方法来实例化。

        组件对象类能够通过New来直接实例化。如 SdeWorkspaceFactoryQueryFilter它们是可以通过New来直接实例化的。

    2、继承

    3、类和接口的实现

    一些类可能实现多个接口,一个接口也可能被多个类所实现,但不同的类实现同一个接口可能内部并不是一样的,这就实现了多态性.如ILayer这个接口被多个接口实现,其中包括FeatureLayerRasterLayer,但这两个类实现ILayer接口时内部实现肯定是不一样的!但在外部对ILayer的操作是一样的!

    4、接口之间的相互查询

    一 个类可以实现多个接口,每一个接口可能包括一系列的属性和方法,但有时候一个接口里可能没有你想要的方法和属性,可能在这个类所实现接口的另一个接口里, 这就涉及到从一个接口转到这个类所实现接口的另一个接口里,对于类所实现的一系列接口里,接口间是可以相互跳转的。如我想对一个feature的属性进行修改,给的就是这个featureIFeature接口,我们知道对一个feature进行修改必须要把这个feature所在的featureclass的工作空间设为可编辑,且编辑结束后要结束编辑,这就要通过这个IFeatue接口来获得这个这个feature所在的IFeatureClass接口和IWorkspace接口,我们知道IFeatue接口里有一个object属性,这个属性返回的是IObjectClass,FeatureClass这个类实现了IObjectClassIFeatureClass这两个接口,这样就可以通过接口跳转从IObjectClass转换成IFeatureClass,这样就可以获得featureIFeatureClass接口,其代码(c#)如下:         

    IObjectClass i_objcls=I_FtrCur.Class;

                IFeatureClass i_ftrcls=(IFeatureClass)i_objcls;

    Feature所在的FeatureClassIFeatureClass接口有了,还要这个FeatureClass所在的工作空间的IWorkspace接口,获取这个接口可以通过两个方法

    一、通过IFeatureClass接口里的FeatureDataset属性来获得IFeatureDataset接口。IFeatureDataset接口里有一个Workspace属性返回IWorkspace接口,但这种方法有一个特别说明就是这个FeatureClass必须是一个FeatureDataset的成员,如果这个FeatureClass是一个独立,这个FeatureDataset返回的就是一个空值。所以这种方法对FeatureClass是一个FeatureDataset的成员时是适用的,独立时就不适用了。

    二、通过接口转换。

    FeatureClass实现了多个接口,其中有IDataset接口和IFeatureClass接口,我们已经有了IFeatureClass接口,就可以通过接口跳转来获得IDataset接口,在IDataset接口里有一个Workspace属性返回IWorkspace接口,这种方法对于FeatureClass是一个FeatureDataset的成员和FeatureClass是独立的这两种情况都是可以的。代码如下:

    IDataset i_ftrDset=(IDataset)i_ftrcls   //接口跳转

    IFeatureWorkspace i_wks=(IFeatureWorkspace)i_ftrDset.Workspace

  • 相关阅读:
    python匹配中文和非中文
    Django mysql连接错误
    linux搭建postfix邮件服务器
    linux编译安装redis
    python将py文件打包成可运行的exe文件
    mysql表结构自动生成golang struct
    linux离线安装nginx+uwsgi
    Sass/Scss
    CSS变量和浏览器前缀
    CSS中常用的函数
  • 原文地址:https://www.cnblogs.com/zhangjun1130/p/1392555.html
Copyright © 2011-2022 走看看