• Delphi 之Inherited详解



    inherited就是调用祖先类的函数,如果不带参数就是默认调用同名函数
    如果带参数则表明子类中的函数个数可能比祖先类要多取其中的几个参数传过去
    例如
    祖先类有个函数 Create(AName:string);
    子类有个函数 Create(AName:string;AComponent:TObject);override;
    那么子类的Create函数内就可以这样调用祖先类:
    procedure TAClass.Create(AName:string;AComponent:TObject);
    begin
    Inherited Create(AName);
    end;

     

     
     
    Inherited
    Keyword
    Used to call the parent class constructor or destructor method
    1   Create;
      begin
        Inherited;  // Always call at the start of a constructor
        ...
      end;
    2   Create(arguments);
      begin
        Inherited Create(arguments);  // Always call at the start of a constructor
        ...
      end;
    3   Destroy;
      begin
        ...
        Inherited;  // Always call at the end of a destructor
      end;
     
    Description
    The Inherited keyword is used to call the parent constructor or destructor method, as appropriate, for the current class. 
     
    It is called at the start of a constructor, and at the end of a desctructor. It is not mandatory, but recommended as good practice. 
     
    Without parameters, Inherited calls the same named method the parent class, with the same parameters. 
     
    You can call a different parent method, if appropriate.
     
    Related commands
    Class   Starts the declaration of a type of object class
    Constructor   Defines the method used to create an object from a class
    Destructor   Defines the method used to destroy an object
    Function   Defines a subroutine that returns a value
    Object   Allows a subroutine data type to refer to an object method
    Overload   Allows 2 or more routines to have the same name
    Override   Defines a method that replaces a virtual parent class method
    Procedure   Defines a subroutine that does not return a value
     
    Example code : Examples of Inherited with and without explicit parent method names
    // Full Unit code.
    // -----------------------------------------------------------
    // You must store this code in a unit called Unit1 with a form
    // called Form1 that has an OnCreate event called FormCreate.

    unit Unit1;

    interface

    uses
      Forms, Dialogs, Classes, Controls, StdCtrls;

    type
      // Define a parent class, base on TObject by default
      TFruit = class
      public
        name   : string;
        Constructor Create; overload;   // This constructor uses defaults
        Constructor Create(name : string); overload;
      end;

      // Define a descendant types
      TApple = class(TFruit)
      public
        diameter : Integer;
      published
        Constructor Create(name : string; diameter : Integer);
      end;

      // The class for the form used by this unit
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      end;

    var
      Form1: TForm1;

    implementation
    {$R *.dfm} // Include form definitions

    // Create a fruit object - parameterless version
    constructor TFruit.Create;
    begin
      // Execute the parent (TObject) constructor first
      Inherited;  // Call the parent Create method

      // Now set a default fruit name
      self.name := 'Fruit';
    end;

    // Create a fruit object - parameterised version
    constructor TFruit.Create(name: string);
    begin
      // Execute the parent constructor first
      Inherited Create;  // Call the parent Create method

      // And save the fruit name
      self.name := name;
    end;

    // Create an apple object
    constructor TApple.Create(name: string; diameter : Integer);
    begin
      // Execute the parent (TFruit) constructor first
      Inherited Create(name);  // Call the parent method

      // Now save the passed apple diameter
      self.diameter := diameter;
    end;

    // Main line code
    procedure TForm1.FormCreate(Sender: TObject);
    var
      fruit  : TFruit;
      banana : TFruit;
      apple  : TApple;

    begin
      // Create 3 different fruit objects
      fruit  := TFruit.Create;
      banana := TFruit.Create('Banana');
      apple  := TApple.Create('Pink Lady', 12);

      // See which of our objects are fruits
      if fruit  Is TFruit then ShowMessage(fruit.name  +' is a fruit');
      if banana Is TFruit then ShowMessage(banana.name +' is a fruit');
      if apple  Is TFruit then ShowMessage(apple.name  +' is a fruit');

      // See which objects are apples
      if fruit  Is TApple then ShowMessage(fruit.name   +' is an apple');
      if banana Is TApple then ShowMessage(banana.name  +' is an apple');
      if apple  Is TApple then ShowMessage(apple.name   +' is an apple');
    end;
    end.
       Fruit is a fruit
       Banana is a fruit
       Pink Lady is a fruit
       Pink Lady is an apple


  • 相关阅读:
    第八周上机
    第七周作业
    第七周上机练习
    第六周作业
    第六次上机
    第五次上机
    第四周作业
    第四周上机练习
    第三次作业
    第二次作业
  • 原文地址:https://www.cnblogs.com/wanqian/p/3156325.html
Copyright © 2020-2023  润新知