各位老大,对继承实现方法,怎么调用父类的方法部分?(100分)

  • 主题发起人 主题发起人 ssq237712
  • 开始时间 开始时间
S

ssq237712

Unregistered / Unconfirmed
GUEST, unregistred user!
比如:
TParentClass = class
public
function GetName:String;dynamic;
end;

TChildClass = class(TParentClass)
public
function GetName: String;override;
end;

实现:
TParentClass.GetName: String;
begin
result := 'ParentClass';
end;

TChildClass.GetName: String;
begin
result := 'ChildClass';
end;

现在外部程序创建了一个子类TChildClass的实例C,希望调用C.GetName时返回父类的结果'ParentClass',怎么实现????
 
为什么不把实例C声明为TParentClass类型?
 
为什么你要做一件逻辑上自相矛盾的事:)
 
我想做个类似delphi的属性编辑器的玩意,基类定义方法GetProperties返回其属性信息,子类继承实现该方法。当你多选不同类型的组件时,只显示它们共同的父类的属性。
 
即使实现了你说的方法,可这是违反面向对象原则的,没意义。
 
如果你只是为了获得类名称,没必要自己实现。
TChildClass.ClassParent.ClassName或者
ChildInstance.ClassParent.ClassName
这就足够了,当然别忘了检测ClassParent的返回值是否为空
 
那各位可知道delphi的属性编辑器是怎么做的?在多选的时候只显示他们共有的属性。不可能他一个个的去判断寻找吧...
 
SeptSky:我只是举一个很简单的例子。我是想做个类似delphi属性编辑器的东西。
基类定义:function GetProperties: TProperties;virtual;返回它自己的属性星系列表
子类继承实现该方法。当你多选不同类型的组件时,只显示它们共同的父类的属性。
 
其实也不难,利用上面的方法找到所选组件的共同祖先类,你当然知道该如何该类具有那些
published的属性了。关键之处研究透TObject的各个方法,包括对象方法和类方法
 
我不想用RTTI,那里面封装的信息太少,反正我要编辑的都是我自己实现的类,所以我特地定义了TProperties类。单个编辑没问题,但多选时就不知道咋办了。
 
感谢各位,找到解决的办法了。如下:
TChildClass = class(TParentClass)
public
function getName:String;overload;
end;

function TChildClass.GetName: String;
begin
Result := TParentClass(Self).GetName + ' ChildClass';
end;
 
很简单的,如下调用即可:
(C As TParentClass).GetName
或者强制类型转换:
TParentClass(C).GetName
 
在子类里面?那就更简单了,标准做法是:
function TChildClass.GetName: String;
begin
Result := inherited GetName;
Result := Result + ' ChildClass';
end;
 
多人接受答案了。
 

Similar threads

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