专业的家居网站建设,江苏金安建设公司网站,宣威网站建设c3sales,贵州城乡住房建设厅网站内容整理自花利忠教授的课件 文章目录 组件对象模型COM基本概念使用接口定义类查询接口(QueryInterface)COM总结 组件对象模型COM
基本概念
对象(Object)#xff1a; 系统中用来描述客观事物的一个实体#xff0c;构成系统的一个基本单位。由类实例化产生
类(Class)#… 内容整理自花利忠教授的课件 文章目录 组件对象模型COM基本概念使用接口定义类查询接口(QueryInterface)COM总结 组件对象模型COM
基本概念
对象(Object) 系统中用来描述客观事物的一个实体构成系统的一个基本单位。由类实例化产生
类(Class) 描述一组有相同特性属性和相同行为方法的对象。
接口(Interface) 定义了一组方法和属性的数据结构通过这组数据结构可以调用组件对象的功能
命名空间(Namespace) 用来组织类通常可以把相关联的类放在一个命名空间中进行有效的管理
组件对象模型(Component Object Model) COM不是接口也不是对象它是一种二进制级别的组件通信标准。对象间的所有通信都是通过它们的接口来进行的。
COM对象 符合COM标准的对象COM对象是实现了很多接口的对象
多态性 同一操作用于不同的对象可以有不同的解释产生不同的执行接口。一个类可以有多个接口一个接口可以由多个类实现
ArcGIS中类的多态性几个类使用同一个Interface但每一个类却执行不同的方法和属性
使用接口定义类
接口名 变量名 new 类();
在COM中对对象的访问时通过接口完成的因此不能像许多可视化控件那样可直接通过其名称来调用属性或执行其方法。
//定义一个接口变量
IDrive pGarbage;有了这个接口对象还不行因为接口是定义在对象上的应该产生一个对象而对象又是从那里来的呢–类。于是实例化一个类
pGarbage new GarbageTruck();虽然我们实例化了一个GarbageTruck类但是我们只得到了该类的IDrive接口只能使用IDrive接口上的方法与属性如果要使用别的接口需要使用这个接口变量pGarbage查询出其他接口
查询接口(QueryInterface)
COM对象有很多接口不同的接口管理着不同类型的方法 因此可以从一个接口转到另一个接口称为QI 这个过程是由Idispatch接口管理的 Idrive pCar new RaceCar();
pCar.Accelerate(); //调用该接口的方法
IRace pRace pCar as IRace; //接口查询
//或者IRace pRace (IRace)pCar;
pRace.PitStop();
pCar.Accelerate();COM总结
COM不是接口也不是对象符合COM标准的对象称为COM对象COM对象必须实现lunknown接口它是默认实现的接口这个接口是管理COM对象声明周期的当COM对象不使用的时候这个接口定义的方法负责释放内存每个组件都有一个独一无二的标识这就是所谓的全球唯一标识符GUID 。这个标识符就是COM组件的身份它是一个128bits的数字由系统自由分配一个COM对象可以有多个接口一个接口也完全可以被多个COM对象实现通过实现这些接口COM实现了面向对象的多态性几个类可以有同样的接口 但是它们的实现可能是极不相同的COM对象的接口是抽象的接口与类不同。因为接口没有任何的实现所以不能通过自身实例化。接口由具体的类来实现功能用接口抽象地模拟并且用类取真正实现COM中的接口和类通常被当做“做什么”和“怎么做”(What,How)接口定义一个对象能做什么但自己什么都不做类定义它怎么去做COM对象的接口是不可变的。接口永远都不会版本化。一旦定义下来并发布接口不能够改变DLL灾难COM是可以被重用的COM对象的实现过程也可以被修改升级如果两个程序使用一个COM对象而这个COM组件升级了的话很可以就出现某个程序无法使用新组件的情况。 我们有时候安装了新软件后很多别的软件都无法使用很多都是因为DLL HELL。别以为这是个小问题这可是微软提出.NET平台的一个主要原因