ArcObjects开发中的多态与类型转换问题
来源:互联网 发布:淘宝封店了怎么办 编辑:程序博客网 时间:2024/04/28 23:29
在ArcObjects 中,众多的对象、接口眼花缭乱,之间关系更是错综复杂。对于初学者,甚至包括一些对AO相当了解的人对如何熟练转换接口未必能够做到胸有成竹。在许多教材、手册也往往是就事论事,给出代码了事。再好点的画个模型图,都没有从根本上解释清楚接口之间、接口与类之间的转换关系。特别是对于为什么由一个接口可以得出另一个接口,许多资料只是解释为接口查询,其实这只是技术层面的问题,接口查询主要是对于COM 的概念,对于.NET不太适用。那末在NET环境下开发AO,又如何理解接口之间的转换。利用多态的思想可以帮助我们和好地理解和使用和接口之间的转换。
什么是多态呢
多态是面向对象编程语言非常重要的特性。利用多态,可以为应用程序增加灵活性,减少代码之间的紧密藕合。基本上每一种面向对象的编程语言都提供了多态性,掌握好多态,是步入面向对象程序设计大门非常重要的一步。什么是多态呢?通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型、或者在实现接口时用作任何接口类型,这称为多态性。C# 中的每种类型都是多态的。类型可用作它们自己的类型或用作 Object 实例,因为任何类型都自动将 Object 当作基类型。
多态体现了对象的功能特性的不同方面,比如实现不同接口。体现了对象继承的层次关系,继承基类。
AO中的多态
AO中的组件类(CoClass)都是多态的。例如 SimpleFillSymbol CoClass ,实现了以下接口,
IClone (esriSystem)
IDisplayName
IFillSymbol
IMapLevel
IPersist
IPersistStream (esriSystem)
IPropertySupport (esriSystem)
ISimpleFillSymbol
ISymbol
IXMLSerialize (esriSystem)
那末它就具有以上接口类型。
派生接口也具有多态性。例如 ISimpleFillSymbol 继承自 IFillSymbol ,同就同时兼具两者两种接口类型。
结论一:具有继承关系或实现关系的类与接口之间可以进行类型转换,这是多态的一种表现。
例如:IFillSymbol fillSymbol=new SimpleFillSymbolClass();
ISymbol symbol=new SimpleFillSymbolClass();
IXMLSerialize serialize =new SimpleFillSymbolClass();
就是说SimpleFillSymbol具有多态,那么就可以直接使用其中任何一态。
结论二:具有相同基类(或相同实现类)的接口之间可以转换,但需要显示说明。
例如:ISymbol symbol=new SimpleFillSymbolClass();
IXMLSerialize serialize =(IXMLSerialize )symbol;
其实质与结论一的情况是一样,虽然两种类型不同,也无继承关系,而是利用共同基类的多态性。
什么是多态呢
多态是面向对象编程语言非常重要的特性。利用多态,可以为应用程序增加灵活性,减少代码之间的紧密藕合。基本上每一种面向对象的编程语言都提供了多态性,掌握好多态,是步入面向对象程序设计大门非常重要的一步。什么是多态呢?通过继承,一个类可以用作多种类型:可以用作它自己的类型、任何基类型、或者在实现接口时用作任何接口类型,这称为多态性。C# 中的每种类型都是多态的。类型可用作它们自己的类型或用作 Object 实例,因为任何类型都自动将 Object 当作基类型。
多态体现了对象的功能特性的不同方面,比如实现不同接口。体现了对象继承的层次关系,继承基类。
AO中的多态
AO中的组件类(CoClass)都是多态的。例如 SimpleFillSymbol CoClass ,实现了以下接口,
IClone (esriSystem)
IDisplayName
IFillSymbol
IMapLevel
IPersist
IPersistStream (esriSystem)
IPropertySupport (esriSystem)
ISimpleFillSymbol
ISymbol
IXMLSerialize (esriSystem)
那末它就具有以上接口类型。
派生接口也具有多态性。例如 ISimpleFillSymbol 继承自 IFillSymbol ,同就同时兼具两者两种接口类型。
结论一:具有继承关系或实现关系的类与接口之间可以进行类型转换,这是多态的一种表现。
例如:IFillSymbol fillSymbol=new SimpleFillSymbolClass();
ISymbol symbol=new SimpleFillSymbolClass();
IXMLSerialize serialize =new SimpleFillSymbolClass();
就是说SimpleFillSymbol具有多态,那么就可以直接使用其中任何一态。
结论二:具有相同基类(或相同实现类)的接口之间可以转换,但需要显示说明。
例如:ISymbol symbol=new SimpleFillSymbolClass();
IXMLSerialize serialize =(IXMLSerialize )symbol;
其实质与结论一的情况是一样,虽然两种类型不同,也无继承关系,而是利用共同基类的多态性。
- ArcObjects开发中的多态与类型转换问题
- arcobjects,IRing与Ipolygon转换
- .NET中的Color,Font,Bitmap,Icon与ArcObjects中的对象互相转换
- arcobjects开发中发现的问题
- java中的类型转换问题
- C#中的类型转换问题
- js中的类型转换问题
- 多态中的引用类型转换
- 多态中的引用类型转换
- Java多态中的引用类型转换
- Java 多态中的类型转换(instanceof)
- java多态中的引用类型转换
- Java中的类型转换与强制类型转换的实现
- ArcObjects与ArcGIS Engine
- 类型转换中的符号扩展问题
- jsp页面中的类型转换问题
- eclipse中的Date类型转换问题
- 解密Java中的类型转换问题
- hibernate的配置
- 如何合并DataTable
- 大规模超文本web搜索引擎剖析-转载
- 公交车路线查询系统后台数据库设计——查询算法
- vb.net常用函数
- ArcObjects开发中的多态与类型转换问题
- Repeater控件使用心得
- .Net 下未捕获异常的处理
- VC中动态添加控件
- 数组转DataTable通用类
- 对老赵写的简单性能计数器的修改
- Javascript 如何取小数点后面N位
- 对老赵写的简单性能计数器的修改续- 关于 GetThreadTimes
- 《ExtJS2.0实用简明教程》之ExtJS简介