关于AE接口的一些说明

2020-04-14 03:05

关于arcengine接口的一些说明

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

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

类是不能直接实例化的,它只能作为另一个类的属性或者被其它类的对象实例化。如Sde3Workspace Class、Sde4Workspace Class,

FeatureClass,FeatureDataset它们是不能通过New直接实例化的,只能通过SdeWorkspaceFactory CoClass这个组件对象类所实现的IWorkspaceFactory接口里的Open方法来实例化。 FeatureClass,FeatureDataset也是不能直接实例化的,他只能通过IFeatureWorkspace接口里的 CreateFeatureClass,CreateFeatureDataset方法来实例化。

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

2、继承

类继承(type inheritance)定义了专门的类,它们拥有超类的属性和方法,并且同时也有自身的属性和方法。

上图说明primary line 和secondary line 是line 的一种类型。

实例化(Instantiation)指定一个类的对象有这样的方法,它能够创建另外一个类的对象。

pole 对象有一个方法能够创建transformer 对象。

3、类和接口的实现

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

4、接口之间的相互查询

一个类可以实现多个接口,每一个接口可能包括一系列的属性和方法,但有时候一个接口里可能没有你想要的方法和属性,可能在 这个类所实现接口的另一个接口里,这就涉及到从一个接口转到这个类所实现接口的另一个接口里,对于类所实现的一系列接口里,接口间是可以相互跳转的。如我 想对一个feature的属性进行修改,给的就是这个feature的IFeature接口,我们知道对一个

feature进行修改必须要把这个 feature所在的featureclass的工作空间设为可编辑,且编辑结束后要结束编辑,这就要通过这个IFeatue接口来获得这个这个 feature所在的IFeatureClass接口和IWorkspace接口,我们知道IFeatue接口里有一个object属性,这个属性返回的 是IObjectClass,而FeatureClass这个类实现了IObjectClass和IFeatureClass这两个接口,这样就可以通过 接口跳转从IObjectClass转换成IFeatureClass,这样就可以获得feature的IFeatureClass接口,其代码(c#) 如下:

IObjectClass i_objcls=I_FtrCur.Class;

IFeatureClass i_ftrcls=(IFeatureClass)i_objcls;

Feature所在的FeatureClass的IFeatureClass接口有了,还要这个

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 个人感觉在OMD图中比较难理解的就是可实例化类CLASS。我做了以下例子去理解它:

ArcEngine中 workSpace 就是一个可实例化类,

WorkSpace不能用new创建,但可以通过WorkSpaceFarctory.Openfromfile()方法来创建.如下:

IWorkspaceFactory pWorkspaceFactory = new AccessWorkspaceFactoryClass(); IWorkspace pWorkspace =

pWorkspaceFactory.OpenFromFile(ConnectionString, 0); 但当我们尝试用New去创建一个Workspace类时,如下:

IWorkspace pWorkspace = new WorkspaceClass(); 就会出现以下错误:

“类型”ESRI.ArcGIS.Geodatabase.WorkspaceClass未定义构造函数; 所以,Class和CoClass的主要区别就是CoClass是带构造函数的Class.以此它可以用New直接创建对象


关于AE接口的一些说明.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:软件工程(数据字典、数据流图、需求分析)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: