Difference between revisions of "Inherited/ru"

From Free Pascal wiki
Jump to navigationJump to search
Line 52: Line 52:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
== virtual methods override ==
+
== Переопределение виртуальных методов ==
  
 
<syntaxhighlight lang="pascal">
 
<syntaxhighlight lang="pascal">
Line 62: Line 62:
 
function TMyClass.GetObject(Index: Integer): TObject;
 
function TMyClass.GetObject(Index: Integer): TObject;
 
begin
 
begin
   // Get result from parent class method
+
   // Получаем результат из метода родительского класса
 
   Result := inherited GetObject(Index);   
 
   Result := inherited GetObject(Index);   
   // Do something 
+
   // Делаем что-нибудь дальше
 
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;