类的继承问题 ( 积分: 50 )

  • 主题发起人 喜之狼
  • 开始时间
Ttype :TObject;
if flag=1 then Ttype :=TObject(Tclass1)
if flag=2 then Ttype :=TObject(Tclass2)
 
你取那个类(也就是你不知道继承自那个类的类,暂时叫tmpclass)的classname做判断就行了
 
找了好久 .. 没找到Delphi面向对象编程思想这本书的电子版  to ak_2005 你有这本书的电子版么
to lichengbin 谢谢  你的办法可以 加油做主页喔[:)]
to hs-kill 类名做变量 ?? 好象不行吧
 
 
抱歉没弄明白狼的意思。。。。你是想在程序里自动根据一个flag来把那个公共类从别的类里继承?

恕我材疏学浅既然你的公共类都不确定又哪个类继承,那是不是继承以后也应该没有自己的私有属性啊,如果如此那为什么又要继承?直接根据一个flag来调用不同的父类不就行了?
 
to lichengbin:
我倒,怎么在我这里改成IF..IFEND就会出现
[Error] Unit1.pas(30): Invalid compiler directive: 'IF'
[Error] Unit1.pas(32): Invalid compiler directive: 'ELSEIF'
我用的是D5,你用的是D7,有关系吗?
 
呵呵,$IF/$IFEND是Delphi6+才有的编译指令,还在用D5呀,该升升级啦[:D][:D][:D]
 
to hs-kill 因为程序中多次调用这个公共类,如果不直接判断flag后 选择要调用的类也可以 但是工作量比较大 有了错误也不好判断 所以有了这个想法 我的父类(其实是一系列驱动) 属性名称相同 设好公共类后应该可以用 还没有动手做 现在只是在考虑可行性 欢迎提出宝贵意见 
《Delphi面向对象编程思想》看到了书中的例子 感觉应该也可以 学习中... 谢谢 热心的dfw
 
这样啊。我也找个《Delphi面向对象编程思想》看看吧。。。。

不过看以前。。我有个想法你那一系列驱动应该也是继承自一个更高的类吧。。比如Tobject这样的,找那里面的一个能做标志的属性。。比如tag这样的。。在继承的时候赋个初值

或者。。你继承过来以后。。无论继承的哪个父类,都添加一个新的只读属性flag,然后根据父类不同赋不同的值。。。

说说而已,我没做过。。如果说错了别骂我
 
举个类工厂的例子应该能够解决你的问题
{********************************************************************
类 名:TFactory
********************************************************************}

TFactory=class
public
class function Getflag(AccType:TAccType):Tabc;
end;
TType=(sfde,sfde1,sfde2,sfde3,sfde4,
sfde5,sfde6,);

Tsfde1 = class (Tabc)
private
..
public
..
Tsfde2 = class (Tabc)
private
..
public
Tsfde3 = class (Tabc)
private
..
public
..
..
.....
.....



class function TFactory.Getflag(
Type:TType):Tabc;
begin
Result:=nil;
case AccType of
sfde1:Result:=Tsfde1.Create;
sfde2:Result:=Tsfde2.Create;
sfde3:Result:=Tsfde3.Create;
sfde4:Result:=Tsfde4.Create;
sfde5:Result:=Tsfde5.Create;
sfde6:Result:=Tsfde6.Create;
end;
end;
 
to hs-kill 可以一试 是个办法
 
用设计模式的方法也可以解决 谢谢热心的dfw 分少不成敬意 再次感谢
 
多人接受答案了。
 

Similar threads

回复
0
查看
862
不得闲
S
回复
0
查看
956
SUNSTONE的Delphi笔记
S
S
回复
0
查看
778
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
顶部