inherited在命令里到底是什么意思,起什么作用的?
看别人的程序,命令按钮里面就一句话,‘inherited’,

解决方案 »

  1.   

    代码就一句,怎么知道他的父类?procedure TfmLogout.OKBtnClick(Sender: TObject);
    begin
      inherited;
      if rbLogout.Checked then
        fmMain.Caption := '进销存管理系统';
    end;
      

  2.   

    inherited是继承,是先执行父类的代码,再执行自身的代码。参考一下这个例子,看看执行结果:
    unit MyClass;interfaceuses Dialogs;type
      Ta = class
        public
          procedure Test();
        end;  Tb = class(Ta)
        public
          procedure Test();
        end;implementation{ Ta }procedure Ta.Test;
    begin
      ShowMessage('类a的代码');
    end;{ Tb }procedure Tb.Test;
    begin
      inherited;
      ShowMessage('类b的代码');
    end;end.测试代码:unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, MyClass, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
    var A1:Ta;
        B1:Tb;
    begin
      A1:=Ta.Create;
      A1.Test;
      A1.Free;
      B1:=Tb.Create;
      B1.Test;
      B1.Free
    end;end.
      

  3.   

    如果是在某个类的某个方法第一句就是inherited;
    这表示在当前类的当前方法执行时,首先执行父类中同名方法,然后再执行当前类的相关处理。
    inherited关键字应用的场合多为实现类的多态用。如用于类的构建,一些界面的重绘等
    inherited从字面上理解为“通过继承得到的,遗传的”,这只是其原意。引申到OOP中也就是上面所描述的意思了。
    类似的代码为:TSomeObj.create(const AFlag:boolean);
    begin
      inherited;//---先执行父类的创建方法
     。。在这里再执行其他的自定义操作。 
    end;
      

  4.   

    你看看TfmLogout这个窗口类从哪里继承的,他的父类窗口是不是也有一个OKBtn?
      

  5.   

    如果你看到这样的情况,一般情况下是人家把这个窗体类型已经做成模板了,有部分工作做的组件模式开发就喜欢这样,比如查询窗体,做成一个模板后,根据传入的参数做查询操作,模板中已经写好语句了,你的窗口继承这个模板的话,模板里面所有写代码的地方,你这边打开看到的就只有一个inherited; 当然你也可以在这里面继续写自己的