接口问题,高手请进!!!!!!!!!!!!!! ( 积分: 30 )

  • 主题发起人 主题发起人 BeCalm
  • 开始时间 开始时间
B

BeCalm

Unregistered / Unconfirmed
GUEST, unregistred user!
1.delphi在comobj单元中实现了com的规范,支持了com组件的编写,这一点可以理解,但是在delphi本身实现了接口,像delphi7中,Tcomponent=class(Tpersistent,Iinterface,IInterfaceComponentReference),这里Tcomponent实现在两个接口,关于这两个接口我有两个疑问请高手指点:1.这两个接口有什么用?2.怎么使用,使用的具体过程是什么样子的,最好能给出关于vmt表的实现模拟;这里因为com组件的使用是使用com库,注册表,com类厂来获得com组件接口的方法属性,这也能理解,不理解的就是这delhpi的接口使是VCL组件本身成了com组件这什么意思,难不成也像其它com组件一样使用吗,不可理解,请高手明示!!!
 
IInterface是所有接口的祖先,类似TObject在类继承中的地位
接口是使用引用技术来自己控制自己的生命周期的
所以IInterface定义了三个函数,分别是增加,减少引用计数和查看实现这个接口的对象还实现的别的接口
要实现接口,类就需要实现这三个函数
Delphi中提供了TInterfacedObject类,实现了这三个函数
所以以后要实现某个接口,我们的类只要从TInterfacedObject这个类继承就可以了

如果理解了抽象类,再理解接口容易一些,以前都是使用抽象类来实现类似接口的功能
微软设计COM的时候第一次明确提出了“接口”这个具体的用法
Delphi为了实现COM在Delphi3中也定义了“接口”作为语言的一个要素
Delphi5开始“接口”成为通用的语言要素,并不单单为了COM
在Java,C#也明确提出了“接口”这个语言要素

至于VMT,在Delphi5之后的版本的确是使用了VMT特定的域来保存实现的接口
为了和其他虚拟方法区别开
这涉及到怎样实现接口,对于理解接口本身的意义并没有太大的帮助

建议楼主找本书详细理解一下接口的概念
 
muhx,谢谢你的回复,我知道接口的概念和意义,我这里不明白的是,delhi本身Framework实现了接口机制后,是怎么用这些接口的,这里的接口和普通的COM组件接口一样使用吗,我觉得二者是有一定区别的,delphi这里应该只是使用了接口的理念,来处理对一个delphi类对象的某些方法属性的使用问题,不知道,muhx高手同意我的观点吗,欢迎继续参加讨论,谢谢!!!!
 
在Delphi5之后将接口变为通用机制而不使他成为COM的专属
但是为了和以前COM接口区别Delphi还是做了一些语言上的区别
比如普通接口都是继承自IInterface,COM接口都是继承自IUnknown
当然IInterface = IUnknown
另外普通接口没有必要加入GUID,而COM接口一定要加入GUID

对于实现来说,无论是COM接口还是普通接口
如果使用了GUID
我的记忆中好像都是一样的

在Delphi5以后的版本中加入的很多功能都有意识使用了接口加实现类的方式代替了类继承
比如对XML的支持就是使用了大量的接口来实现的
 
muhx,你好,你说的我同意,呵呵,只是我不知道怎么样才能让你知道我不明白的地方:),举一个例子吧:TMyform = class(TForm)
function getName();
end;
var
Myform: TMyform;
(这个Myform中的类,Tcomponent实现了接口IInterface,IDispatch
以及IIterfacedcomponentReference三个接口)
[green]GoOn->[/green]
TMyform1 = class(TForm)
function getName();
end;
var
Myform1: TMyform1;
现在有两个问题:1. 如果我现在要在myform中使用使用这三个接口怎么用;
2.如果我现大要在Myform1中使用myform的Tcomponent类中
实现的接口,又怎么用;
3.它们使用的过程也调用了com类库了吗,使用了类厂了
吗?我想没有,但是是怎么实现的呢,这应该在编译器
自动加进了这些接口的引用机制,请问这个机制是什么
样子的,可能我说的有点不清楚或门外,呵呵!!!
 
欢迎参加讨论!!!都发表发表意见阿!
 
多人接受答案了。
 
后退
顶部