IWindow
procedure Draw;// TframeWindow重新实现// 这是静态方法,隐藏了父类的方法...
end;
重新实现一个接口隐藏了它继承下来的实现,因此,祖先类中的方法解析子句对于重新实现的接口没有影响。
Implementing inteces by delegation(通过委托实现接口) Implementing inteces by delegation(通过委托实现接口)
implements指示字允许你在实现类中委托一个属性来实现接口,比如
property MyIntece: IMyIntece read FMyIntece implements IMyIntece; 上面声明了一个叫做MyIntece的属性,它实现了接口IMyIntece。
在属性声明中,implements指示字必须是最后一项,它可以实现多个接口,接口之间以逗号分隔。委托的属性要满足以下条件:
? 必须是类或接口类型;
? 不能是数组属性,也不能使用index限定符;
? 必须有一个读限定符。若属性使用read方法,则方法必须使用默认的register调用约定,并且不能
是动态方法(但可以是虚方法),也不能使用message指示字。
注意:实现委托接口的类应当从TAggregatedObject派生。
- 145 -
Object inteces
Delegating to an intece-type property(委托一个接口类型的属性)
如果委托的属性是接口类型,那么此接口(或者它的派生接口)必须出现在类声明中的祖先列表中(也就是声明实现这些接口)。委托的属性必须返回一个对象,此对象所属的类完全实现了implements所指明的接口,并且没有使用方法解析子句。比如
type
IMyIntece = intece
procedure P1;
procedure P2;
end;
TMyClass = class(TObject, IMyIntece)
FMyIntece: IMyIntece;
property MyIntece: IMyIntece read FMyIntece implements IMyIntece; end;
var
MyClass: TMyClass;
MyIntece: IMyIntece;
begin
MyClass := TMyClass.Create;
MyClass.FMyIntece := ... // 某个实现了IMyIntece 接口的对象
MyIntece := MyClass;
MyIntece.P1;
end;
Delegating to a class-type property(委托一个类类型属性)
如果委托属性是一个类类型,那么在定位实现的方法时,会先搜索这个类以及它的祖先类,然后再搜索当前类(也就是定义属性的类)以及它的祖先类。所以,可以在属性指定的类中实现某些方法,而另一些方法在当前类实现。可以象平常一样使用方法解析子句来避免含糊的声明,或者(只是)使用一个特别的方法声明。一个接口不能委托给多个类类型的属性实现。比如
type
IMyIntece = intece
procedure P1;
procedure P2;
end;
TMyImplClass = class
procedure P1;
procedure P2;
end;
TMyClass = class(TIntecedObject, IMyIntece)
FMyImplClass: TMyImplClass;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-109.html
恒大淘宝2
高喊着防杀伤性武器入侵伊拉克