Difference between revisions of "Inherited"

From Lazarus wiki
Jump to navigationJump to search
(virtual method override example)
m (Fixed syntax highlighting)
Line 1: Line 1:
 
{{Inherited}}
 
{{Inherited}}
 +
 +
 +
Back to [[Reserved words]].
  
  
Line 7: Line 10:
 
This case is the simplest:  
 
This case is the simplest:  
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
Type   
 
Type   
 
   TMyClass = Class(TComponent)   
 
   TMyClass = Class(TComponent)   
Line 20: Line 23:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== constructors and destructors case ==
+
== Constructors and destructors case ==
  
 
[[Constructor|<syntaxhighlight lang="pascal" enclose="none">Constructor</syntaxhighlight>]], example 1 :
 
[[Constructor|<syntaxhighlight lang="pascal" enclose="none">Constructor</syntaxhighlight>]], example 1 :
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   ...
 
   ...
 
   TTest.Create;
 
   TTest.Create;
Line 33: Line 36:
  
 
<syntaxhighlight lang="pascal" enclose="none">Constructor</syntaxhighlight>, example 2 :
 
<syntaxhighlight lang="pascal" enclose="none">Constructor</syntaxhighlight>, example 2 :
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   ...
 
   ...
 
   TTest.Create(...);
 
   TTest.Create(...);
Line 44: Line 47:
  
 
[[Destructor|<syntaxhighlight lang="pascal" enclose="none">Destructor</syntaxhighlight>]], example 3 :
 
[[Destructor|<syntaxhighlight lang="pascal" enclose="none">Destructor</syntaxhighlight>]], example 3 :
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
   TTest.Destroy;
 
   TTest.Destroy;
 
   begin
 
   begin
Line 53: Line 56:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== virtual methods override ==
+
== Virtual methods override ==
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">

Revision as of 14:12, 17 February 2020

Deutsch (de) English (en) suomi (fi) français (fr) русский (ru)


Back to Reserved words.


In an overridden virtual method, it is often necessary to call the parent class’ implementation of the virtual method. This can be done with the inherited reserved word. Likewise, the inherited keyword can be used to call any method of the parent class.

This case is the simplest:

Type  
  TMyClass = Class(TComponent)  
    Constructor Create(AOwner : TComponent); override;  
  end; 

Constructor TMyClass.Create(AOwner : TComponent);  
begin  
  Inherited;  
  // Do more things  
end;

Constructors and destructors case

Constructor, example 1 :

  ...
  TTest.Create;
  begin
    Inherited; // Always at the beginning of the constructors and start the constructor (code only) of the parent class
    ...
  end;

Constructor, example 2 :

  ...
  TTest.Create(...);
  begin
    Inherited Create(...); // Always at the beginning of the constructors and start the constructor (code only) of the parent class
    ...
  end;
  ...

Destructor, example 3 :

  TTest.Destroy;
  begin
    ...
    Inherited;  // Always at the end of the destructors and start the destructor (code only) of the parent class
  end;
  ...

Virtual methods override

type  
  TMyClass = class(TStrings)  
    function GetObject(Index: Integer): TObject; override;  
  end; 

function TMyClass.GetObject(Index: Integer): TObject;
begin
  // Get result from parent class method 
  Result := inherited GetObject(Index);  
  // Do something  
end;