Difference between revisions of "Inherited/ru"
From Free Pascal wiki
Jump to navigationJump to searchLine 52: | Line 52: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | == | + | == Переопределение виртуальных методов == |
<syntaxhighlight lang="pascal"> | <syntaxhighlight lang="pascal"> | ||
Line 62: | 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> |
Revision as of 08:46, 11 February 2020
│
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;