怎样才算引用一个接口(100分)

  • 主题发起人 主题发起人 lizheng
  • 开始时间 开始时间
L

lizheng

Unregistered / Unconfirmed
GUEST, unregistred user!
...
IName = Interface
Function GetName: String;
TMyClass = class(TObject, IName)
Function GetName: String;
...
Function TMyClass.GetName: String;
begin
Result := 'IName';
end;
...

Form1 = Class(TForm)
...
private
FIName: IName;
FMyClass : TMyClass;
Procedure YINYONG;
...
Procedure Form1.YINYONG;
begin
FMyClass := MyClass.Create;

FIName := FMyClass;
//这样算不算引用一个接口,
//如果算,在程序中我怎样才能两次引用这个接口IName.
...
end;

 
好象是什么DELEGATION和AGGREGATION,这种东西我一看就头昏,哪位给讲讲?
 
应该不需要再声明 finame 吧
 
Delphi把COM的实现改造的怪怪的
搞不是很懂了
这样应该算引用了接口吧
就是不知道其引用记数有没有增加
 
这个"接口"的定义与Delphi中的"接口说明Interface"是何关系?
从你的问题来看,象是方法的引用!?
 
在一个程序里好象是这样,
但如果是程序间的话就不同了。
 
那我怎样再引用一次这个接口呢?
 
我试过,再声明一个变量
FMyClass1: TMyClass;
然后创建它,并将他赋给FIName
FMyClass1 := TMyClass.Create;
FIName ;= FMyClass1;
但引用计数并不增加.
 
用FiName._addref增加引用接口记数
 
>>>>lizheng
1。算,不但因入了借口,而且也实现了它,
2。>>>如果算,在程序中我怎样才能两次引用这个接口IName
我认为你把interface和com混淆了,interface作为关键字目的和本意是为了
可以实现com的接口,但不是仅仅为了它,也为objpascal提供了多成继承
的特性
我觉得(没实验过)只有使用它实现com接口时才存在引用计数的问题,但你
的interface首先必须继承并实现IUnknown才行,一般继承TInterfaceObject
即可。
 
>>>>>>>歪就歪
DELEGATION 委托
AGGREGATION 聚集
他们实际上就是两个(or more)对象如何一起协作为客户服务。两种方式
DELEGATION(委托 ),就是对象A将B的接口和函数一模一样的实现包括名称、参
数表,在A的各个函数直接调用B的相应函数。

AGGREGATION(聚集),在对象A中查询的函数查不到时,就交给B,有B来处理。
//可能是相反,但大概是这意思
这样做的主要目的是更好的集成已有的和将开发的对象,提供一致的,单一的服务。


 
>>>>>>>>>>Jams 这个"接口"的定义与Delphi中的"接口说明Interface"是何关
系?从你的问题来看,象是方法的引用!?
后者是作为pascal unit的接口,如
unit someunit
interface
procedure f1 ;
implementent
procedure f1 ;
begin

end;
procedure f2 ;
begin
end;

end;

那么,use someunit的unit就可以使用procedure f1 ;但不能使用f2,在
interface内定义的数据结构和过程可以被外部访问,。
而前者,是DLEPHI为支持COM的接口而引进的关键字,而同时有不限于定义com的
接口。它和java的接口是一个意思
 
TO sanrex
忘了说,其实我在TMyClass中实现了IUnknown接口的_AddRef和_Release函数,分别是将一个公共变量RefCount加一和减一.
我说" 我试过,再声明一个变量
FMyClass1: TMyClass;
然后创建它,并将他赋给FIName
FMyClass1 := TMyClass.Create;
FIName ;= FMyClass1;
但引用计数并不增加.
"
的意思是当我如此做的时候,那个公共变量RefCount并没有增加.
当我第一次将FMyClass 赋给FIName时,自动调用了_AddRef,RefCount增加了一,
~~~~~~~~
担当我第二次将FMyClass1 赋给FIName时,RefCount却没有增加了一,
~~~~~~~~~
程序中的确是自动调用了_AddRef,但同时又调用了_Release.
也许我说的不是很清楚,下次我把原码贴出来,大家帮我研究研究.
 
Sanrex: Thanks a lot for your help!
 
不好意思,我的机器软驱坏了,不能将原码贴上来。
那位大下能给一个引用接口两次的例子。
先谢了。
 
多人接受答案了。
 
To Sanrex
可以仔细讲讲聚合(Aggregation)和委托(Delegation)的关系吗?
 
后退
顶部