接上一个问题-关于对象的创建和释放。这里需要请教另一个问题:
tmemo继承自tcustommemo,那么,lines属性不是应该把父类的覆盖了吗?怎么还能正确执行? TCustomMemo = class(TCustomEdit)
private
FLines: TStrings;
……
protected
……
procedure SetLines(Value: TStrings);
……
public
……
property Lines: TStrings read FLines write SetLines;
end;
TMemo = class(TCustomMemo)
published
……
property Lines;
……
end;
tmemo继承自tcustommemo,那么,lines属性不是应该把父类的覆盖了吗?怎么还能正确执行? TCustomMemo = class(TCustomEdit)
private
FLines: TStrings;
……
protected
……
procedure SetLines(Value: TStrings);
……
public
……
property Lines: TStrings read FLines write SetLines;
end;
TMemo = class(TCustomMemo)
published
……
property Lines;
……
end;
观察Delphi的VCL框架,我们会发现,一般的控件层次总是分为:{ 抽象基类 }
TCustomXXX = class(TXXXXXX)
protected
//... 属性、方法
public
//... 属性、方法
end;{ 具体控件类 }
TXXX = class(TCustomXXX)
published
//...属性
end;抽象基类一般会提供很多默认的属性(放在protected和public里面),而具体子类可以选择需要的属性,并发布出来,这样才能在设计期直接设置属性。(published出来的属性才可以通过RTTI获取)