我一个类myclass,它的基类是baseclass
baseclass里有个方法比如:procedure AAA;dynamic;
我在myclass里需要override这个方法。问题来了,我想把这个基类的方法改名,
因为在myclass里有另外有一个procedure AAA。 
有没有办法呢?

解决方案 »

  1.   

    没办法,改你的myclass中的另一个procedure AAA吧。你的类设计思路有问题,类的设计是从上而下的,子类的私有方法如果跟父类的方法需要重名,你只能改子类的私有方法。
      

  2.   

    关键是我不想改改这个子类的私有方法。(因为这个子类的后代已经延用了这个方法)
    ------
    没办法吗?
    那只好用土办法了,
    建个tempclass类,继承baseclass,在private加入procedure AAA ;override;
    在protected加入 procedure AAA_temp;virtual;abstract; 
    procedure tempclass.AAA ;
    begin
      inherited;
      AAA_temp;
    end;
    --------
    myclass类继承tempclass类,private 加入procedure AAA_temp;override;
    protected 加入procedure AAA; virtual;
    procedure myclass.AAA_temp ;
    begin
      inherited;
      AAA;
    end;
    //在myclass的基类tempclass把baseclass里的方法转换了一下。呵呵。
      

  3.   

    这不是一个单纯的改方法名的操作。
    那我把具体的问题写出来,大家讨论一下是怎么解决这个问题。
    baseclass是一个基类(是一个form),procedure AAA;virtual;是加载界面数据的方法。
    有很多业务类继承于这个baseclass,如,Bclass1,Bclass2,Bclass3....(诸如入库单,申请单之类)
    当然,这些业务类都要override AAA方法。
    现在有一部分业务类需要在加载数据后再做一个统一的处理,
    procedure Bclass1.AAA;
    begin
      inherited;
      xxx;//这是原来写好的业务逻辑。
      doafter_AAA; //这里是需要新加入的控制。
    end;如果在每一个业务类里都加这个doafter_AAA方法(是同样的逻辑控制),太麻烦。而且以后要修改这个doafter_AAA也要每个业务类都要改一遍。
    再而且不能修改baseclass这个基类,因为还有部分的业务类并不需要这个doafter_AAA方法。
    我上面所说的myclass类就是为了解决这个问题。
      

  4.   

    to  paranoia190(190) 派生类中的AAA;REINTRODUCE;
    这个怎么用?
    我用
    procedure AAA;
    procedure AAA;REINTRODUCE;
    但是这样编不过去.