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

如果"委托属性"是一个 类类型 .
那么在定位实现的方法时,会先搜索这个类以及它的祖先类(委托属性的类),然后再搜索当前类(也就是定义属性的类)以及它的祖先类。所以,可以在属性指定的类中实现某些方法,而另一些方法在当前类实现。
可以象平常一样使用方法解析子句来避免含糊的声明,或者(只是)使用一个特别的方法声明。一个接口不能委托给多个类类型的属性实现。
 委托属性是类类型特点是:属性名标识符和Read 都是属于类类型而不是接口类型.
type 
  IMyInterface = interface //接口类型
    procedure P1;
    procedure P2;
  end;
  TMyImplClass = class    //类类型
    procedure P1;
    procedure P2;
  end;
  TMyClass = class(TInterfacedObject, IMyInterface)
    FMyImplClassTMyImplClass; //类类型变量
    property MyImplClass: TMyImplClass  read FMyImplClass implements
IMyInterface;
    procedure IMyInterface.P1 = MyP1; //方法别名
    procedure MyP1;
      end;
implementation

{$R *.dfm}

{ TMyImplClass }

procedure TMyImplClass.P1;
begin
 ShowMessage('TMyImplClass.P1');
end;

procedure TMyImplClass.P2;
begin
 ShowMessage('TMyImplClass.P2');
end;

{ TMyClass }

procedure TMyClass.MyP1;
begin
 ShowMessage('TMyClass.MyP1');
end;

procedure TForm1.btn1Click(Sender: TObject);
var 
  MyClass: TMyClass;
  MyInterface: IMyInterface;
begin 
  MyClass := TMyClass.Create;
  MyClass.FMyImplClass := TMyImplClass.Create;  //委托属性创建(实例化) 
  MyInterface := MyClass;
  MyInterface.P1;      // 调用 TMyClass.MyP1;
  MyInterface.P2;      // 调用 TImplClass.P2;
end;
posted on 2009-04-13 11:16 Archer 阅读(429) 评论(0)  编辑 收藏 引用 所属分类: Interface 接口的学习与运用
只有注册用户登录后才能发表评论。