В методе, операторе вызова функции или процедуры для обозна-
чения активизации конкретного метода допускается использование
десигнатора уточненного метода. Такой тип вызова называется акти-
визацией уточненного метода.
десигнатор уточненного метода
│ ┌──────────────────────┐ ┌───┐ ┌────────────────────┐
└─┬>│ идентификатор ├>│ . ├───────>│идентификатор метода├>
│ │ объектного типа │ └───┘ ^ └────────────────────┘
│ └──────────────────────┘ │
│ ┌──────────────────────┐ │
└>│ inherited ├──────────┘
└──────────────────────┘
Объектный тип, заданный в десигнаторе уточненного метода,
должен быть таким же, как и включающий метод объектный тип, или
соответствовать родительскому типу.
Для обозначения родительского объектного типа или объектного
типа, включающего метод, можно использовать ключевое слово
inherited; в методах объектного типа, не имеющего предка, ключе-
вое слово inherited использоваться не может.
Неявный параметр Self активизации уточненного метода стано-
вится параметром Self метода, содержащего вызов. Активизация
уточненных методов не предусматривает механизма диспетчеризации
виртуальных методов - вызов будет всегда статическим и всегда вы-
зывает заданный метод.
Активизация уточненного метода используется обычно в переоп-
ределяющем методе для активизации переопределяющего метода. С
учетом описанных выше типов приведем некоторые примеры активиза-
ции уточненных методов:
constructor TNumField.Init(Fx, FY, Flen: Integer;
FName: String; FMin, FMax: Longint);
begin
inherited Init(FX, FY, FLen, FName);
Value := 0;
Min := FMin;
Max := FMax;
end;
function TZipField.PutStr(S: String): Boolean;
begin
PutStr := (Length(S) = 5) and TNumField.PutStr(S);
end;
Как показывают эти примеры, активизация уточненных методов
позволяет переопределяющему методу "вновь использовать" код мето-
да, который он переопределяет.