诚意请教诸位,在Delphi中继承时,怎么在子类中把父为中的published属性或事件屏蔽掉?(10分)

  • 主题发起人 主题发起人 Cash_HYJ
  • 开始时间 开始时间
C

Cash_HYJ

Unregistered / Unconfirmed
GUEST, unregistred user!
如果能给我一个满意的答案,将把分数如实奉上。
 
wddelphi同志,你怎么只会说费话呢?
 
不懂啊,所以学!
 
从你要继承的对象的父类继承
 
sun77wind,我已经试过啦,而且还试过其他很多方法,都不成,才来向你们请教。
 
存在屏蔽的必要吗?
 
因为我想用子类中用自己内部的某个属性或者事件来代替父类中相应的,因此想把它屏蔽掉,不想让用户看到。
 
如果是从delphi的一些固有类继承的话,则可以做到,Delphi通常都提供了TCustomXXX
对象,可以从它来创建子类并重新公开Published属性。
 
如果是从delphi的一些固有类继承的话,则可以做到,Delphi通常都提供了TCustomXXX
对象,可以从它来创建子类并重新公开Published属性。
 
覆盖!
直接定义同名同参数东东把它覆盖掉!
我们曾经继承过TDatabase,覆盖它的Params,让外部程序不能访问password,但在新类内
部却可以对原类的Params读写不误。
 
blueboy, 覆盖这个方法我也试过,但不成。能否说说你的具体做法?
 
Adnil, 你这个方法我也想过,不过我觉得笨了一点,而且实际上变成了从父类的父类继承啦。
 
[:)]诸位,我觉得继承存在这样的规则:对于父类,其成员的开放性只能增加或者保持,而不能减小。
你们认为呢?
 
blueboy, 你所说的覆盖是不是在published区重新定义Property,但只保留Read属性,而把Write属性去掉?
如果是这样的话,用户是用不了这个成员,而且在IDE也看不到,但在代码里预示方法(用.点方法)还是可以
看到这个类成员啊!
 
Delphi没有C++概念中的私有继承,因此这个很难实现,还是使用borland推荐的从TCustomXXX开始吧。
 
type
TNewDatabase=Class(TDatabase)
Private
FNull: TStrings;
protected
Public
Constructor Create(AOwner: TComponent);override;
Published
Property Params: TStrings Read FNull;
......
Constructor TNewDatabase.Create(AOwner: TComponent);
begin
Inherited;
FNull:=nil;
end;
这样做后他读回的就是nil啊。

 
从OO的角度出发,这是无法做到的,也没有那个必要的。
 
承蒙blueboy和Adnil两位仁兄指导,我把分数平分给与你们啦,请别见怪!
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部