Difference between revisions of "Inherited/ru"
From Lazarus wiki
Jump to navigationJump to search (Created page with "{{Inherited}} In an overridden virtual method, it is often necessary to call the parent Class|<syntaxhighlight lang="pascal" enclose="none">class</syntaxhighlig...") |
|||
(3 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
{{Inherited}} | {{Inherited}} | ||
+ | В переопределяемом виртуальном [[Method |методе]] часто необходимо вызывать реализацию виртуального метода родительского [[Class/ru|<syntaxhighlight lang="pascal" inline>class</syntaxhighlight>]]. | ||
+ | Это можно сделать с помощью [[Reserved_word/ru|зарезервированного слова]] <syntaxhighlight lang="pascal" inline>inherited</syntaxhighlight>. Аналогично, [[Keyword/ru| ключевое слово]] <syntaxhighlight lang="pascal" inline>inherited</syntaxhighlight> может использоваться для вызова любого метода родительского <syntaxhighlight lang="pascal" inline>class</syntaxhighlight>. | ||
− | + | Вот простейший пример: | |
− | |||
− | + | <syntaxhighlight lang=pascal> | |
− | |||
− | <syntaxhighlight> | ||
Type | Type | ||
TMyClass = Class(TComponent) | TMyClass = Class(TComponent) | ||
Line 16: | Line 15: | ||
begin | begin | ||
Inherited; | Inherited; | ||
− | // | + | // Что-то делаем еще |
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == | + | == Случаи конструкторов и деструкторов == |
− | [[Constructor|<syntaxhighlight lang="pascal" | + | [[Constructor/ru|<syntaxhighlight lang="pascal" inline>Constructor</syntaxhighlight>]], Пример 1 : |
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
... | ... | ||
TTest.Create; | TTest.Create; | ||
begin | begin | ||
− | Inherited; // | + | Inherited; // Ставится всегда в начале конструктора и запускает конструктор (только код) родительского класса |
... | ... | ||
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | <syntaxhighlight lang="pascal" | + | <syntaxhighlight lang="pascal" inline>Constructor</syntaxhighlight>, Пример 2 : |
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
... | ... | ||
TTest.Create(...); | TTest.Create(...); | ||
begin | begin | ||
− | Inherited Create(...); // | + | Inherited Create(...); // Ставится всегда в начале конструктора и запускает конструктор (только код) родительского класса |
... | ... | ||
end; | end; | ||
Line 43: | Line 42: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | [[Destructor|<syntaxhighlight lang="pascal" | + | [[Destructor|<syntaxhighlight lang="pascal" inline>Destructor</syntaxhighlight>]], Пример 3 : |
− | <syntaxhighlight> | + | <syntaxhighlight lang=pascal> |
TTest.Destroy; | TTest.Destroy; | ||
begin | begin | ||
... | ... | ||
− | Inherited; // | + | Inherited; // Ставится всегда в конце деструктора и запускает деструктор (только код) родительского класса |
end; | end; | ||
... | ... | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == | + | == Переопределение виртуальных методов == |
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
Line 63: | Line 62: | ||
function TMyClass.GetObject(Index: Integer): TObject; | function TMyClass.GetObject(Index: Integer): TObject; | ||
begin | begin | ||
− | // | + | // Получаем результат из метода родительского класса |
Result := inherited GetObject(Index); | Result := inherited GetObject(Index); | ||
− | // | + | // Делаем что-нибудь дальше |
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 17:12, 6 August 2022
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
В переопределяемом виртуальном методе часто необходимо вызывать реализацию виртуального метода родительского class
.
Это можно сделать с помощью зарезервированного слова inherited
. Аналогично, ключевое слово inherited
может использоваться для вызова любого метода родительского class
.
Вот простейший пример:
Type
TMyClass = Class(TComponent)
Constructor Create(AOwner : TComponent); override;
end;
Constructor TMyClass.Create(AOwner : TComponent);
begin
Inherited;
// Что-то делаем еще
end;
Случаи конструкторов и деструкторов
Constructor
, Пример 1 :
...
TTest.Create;
begin
Inherited; // Ставится всегда в начале конструктора и запускает конструктор (только код) родительского класса
...
end;
Constructor
, Пример 2 :
...
TTest.Create(...);
begin
Inherited Create(...); // Ставится всегда в начале конструктора и запускает конструктор (только код) родительского класса
...
end;
...
Destructor
, Пример 3 :
TTest.Destroy;
begin
...
Inherited; // Ставится всегда в конце деструктора и запускает деструктор (только код) родительского класса
end;
...
Переопределение виртуальных методов
type
TMyClass = class(TStrings)
function GetObject(Index: Integer): TObject; override;
end;
function TMyClass.GetObject(Index: Integer): TObject;
begin
// Получаем результат из метода родительского класса
Result := inherited GetObject(Index);
// Делаем что-нибудь дальше
end;