我变了一个Edit控件,继承TCustomEdit,改写了Change过程。
procedure TMyEdit.Change;
begin
  inhertied Change;
  ShowMessage('OnChange'); //永远运行不到这行代码
end;procedure TMyEdit.Change;
begin
  inhertied;
  ShowMessage('OnChange'); //可以运行到这行代码
end;上面两个过程的区别是什么?非常感谢!!!

解决方案 »

  1.   

    学习
    When inherited has no identifier after it, it refers to the inherited method with the same name as the enclosing method. In this case, inherited can appear with or without parameters; if no parameters are specified, it passes to the inherited method the same parameters with which the enclosing method was called
      

  2.   

    TMyEdit=class(TCustomEdit)
      public
        procedure change;override;
      end;
    procedure TMyEdit.change;
    begin
      inherited Change;
      ShowMessage('OnChange'); 
    end;
    procedure TMyEdit.change;
    begin
      inherited ;
      ShowMessage('OnChange'); end;
    经测试,两种方法都可以运行那句代码,你再试试。
      

  3.   

    TMyEdit=class(TCustomEdit)
      public
        procedure change;override;
      end;
    // ?? 当继承时,delphi 没有自动认为同名函数为override父类的函数么?? 
    应该时会的吧
      

  4.   

    // ?? 当继承时,delphi 没有自动认为同名函数为override父类的函数么?? 
    应该时会的吧
    --------------------------------------------
    不会,你自己试一下就知道了,没有声明Override,会有警告信息出现
    其实Change是一个虚拟函数,如果不用Override,
    父类的Change会被子类的Change完全取代而不是实现多态的。
      

  5.   

    不用override是不行的。楼主的问题是奇怪的。
      

  6.   

    override?这个只要在声明是写一下就行了,实现代码处不用的楼主的两个实现基本是一样的,但是“inherited 方法名”的形式可以传递参数给父类方法,因此也可使得子类的方法声明有所不同父类的方法声明