射手的博客
学习Delphi,需要一个记录学习的博客,

 
   implements 指示字允许你在"实现类"中委托一个属性来实现接口.
    property MyInterface: IMyInterface read FMyInterface implements IMyInterface;  
   implements 指示字必须是最后一项,它可以实现多个接口,接口之间以逗号分隔。
------------------------
 委托的属性要满足以下条件:
   •  必须是类或接口类型 {也就是说:实现接口属性分2种,一种是使用类类型实现接口,一种是使用接口类型实现接口}; 
   •  不能是数组属性,也不能使用 index限定符; 
   •  必须有一个读限定符(Read 通常都是类或者接口的变量)。若属性使用 read方法,则方法必须使用默认的 register 调用约定,并且不能
  是动态方法(但可以是虚方法) ,也不能使用 message 指示字。
 注:最后都是用来实现接口的.
-------------------------
Delegating to an interface-type property(委托一个接口类型的属性)
    如果委托的属性是接口类型,那么此接口(或者它的派生接口)必须出现在类声明中的祖先列表中(也就是声明实现这些接口) 。

    委托的属性必须返回一个对象(Read标志符必须是接口,然后通过此接口返回一个实现了此接口的类),此对象所属的类完全实现了 implements 所指明的接口,并且没有使用方法解析子句。
    接口属性的一个特点: 属性标识符.读方法 都是属于接口类型的..

 1type IMyInTerFace = interface(Iinterface)            // 接口类型
 2
 3    procedure P1;
 4    procedure p2;
 5  end;
 6type TmpInTerFace = class(TInterfacedObject, IMyInTerFace)   //实现接口的类
 7    constructor create;
 8    procedure P1;
 9    procedure p2;
10  end;
11type TImplements = class(TInterfacedObject, IMyInTerFace)   //委托属性的类
12 protected
13    FMInTerFace: IMyInTerFace;
14    property MyInTerFace: IMyInTerFace read FMInTerFace implements IMyInTerFace;
15  end;
16
17procedure TmpInTerFace.P1;
18begin
19  ShowMessage('P1');
20end;
21
22procedure TmpInTerFace.p2;
23begin
24  ShowMessage('P2');
25end;
26
27
28var
29  TImp:TImplements; //实现委托属性类
30  InTet:IMyInTerFace; //接口 {接口没有构造函数和析构函数,它们不能被(直接)实例化,除非使用实现了它们(的方法)的类}
31  TnTerImp:TmpInTerFace;  //实现接口类的对象
32begin
33 TImp:=TImplements.Create;
34 TnTerImp:=TmpInTerFace.create;  // 变量初始化.注意只有这样才能赋值.
35 Timp.FMInTerFace:=TnTerImp;  //也可以直接忽略TnTerImp变量而直接使用Timp.FMInTerFace:=TmpInTerFace.Create.
36 InTet:=TImp;
37 InTet.P1;
38end;
39
40end.
41
posted on 2009-04-13 11:17 Archer 阅读(372) 评论(0)  编辑 收藏 引用 所属分类: Interface 接口的学习与运用
只有注册用户登录后才能发表评论。