Difference between revisions of "Inherited"
From Lazarus wiki
Jump to navigationJump to search (brief description of inherited according to fp documentation) |
|||
(6 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
− | {{ | + | {{Inherited}} |
− | + | ||
− | In an overridden virtual method, it is often necessary to call the parent | + | |
+ | Back to [[Reserved words]]. | ||
+ | |||
+ | |||
+ | In an overridden virtual [[Method|method]], it is often necessary to call the parent [[Class|<syntaxhighlight lang="pascal" inline>class</syntaxhighlight>]]’ implementation of the virtual method. | ||
+ | This can be done with the <syntaxhighlight lang="pascal" inline>inherited</syntaxhighlight> [[Reserved word|reserved word]]. Likewise, the <syntaxhighlight lang="pascal" inline>inherited</syntaxhighlight> [[Keyword|keyword]] can be used to call any method of the parent <syntaxhighlight lang="pascal" inline>class</syntaxhighlight>. | ||
This case is the simplest: | This case is the simplest: | ||
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
Type | Type | ||
TMyClass = Class(TComponent) | TMyClass = Class(TComponent) | ||
Line 15: | Line 20: | ||
Inherited; | Inherited; | ||
// Do more things | // Do more things | ||
+ | end; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Constructors and destructors case == | ||
+ | |||
+ | [[Constructor|<syntaxhighlight lang="pascal" inline>Constructor</syntaxhighlight>]], example 1 : | ||
+ | <syntaxhighlight lang=pascal> | ||
+ | ... | ||
+ | TTest.Create; | ||
+ | begin | ||
+ | Inherited; // Always at the beginning of the constructors and start the constructor (code only) of the parent class | ||
+ | ... | ||
+ | end; | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | <syntaxhighlight lang="pascal" inline>Constructor</syntaxhighlight>, example 2 : | ||
+ | <syntaxhighlight lang=pascal> | ||
+ | ... | ||
+ | TTest.Create(...); | ||
+ | begin | ||
+ | Inherited Create(...); // Always at the beginning of the constructors and start the constructor (code only) of the parent class | ||
+ | ... | ||
+ | end; | ||
+ | ... | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | [[Destructor|<syntaxhighlight lang="pascal" inline>Destructor</syntaxhighlight>]], example 3 : | ||
+ | <syntaxhighlight lang=pascal> | ||
+ | TTest.Destroy; | ||
+ | begin | ||
+ | ... | ||
+ | Inherited; // Always at the end of the destructors and start the destructor (code only) of the parent class | ||
+ | end; | ||
+ | ... | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | == Virtual methods override == | ||
+ | |||
+ | <syntaxhighlight lang="pascal"> | ||
+ | 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; | end; | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 17:16, 6 August 2022
│
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;