Inherited/ru
From Lazarus wiki
Jump to navigationJump to search
│
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;