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;