Активизация уточненных методов
В методе, операторе вызова функции или процедуры для обозна- чения активизации конкретного метода допускается использование десигнатора уточненного метода. Такой тип вызова называется акти- визацией уточненного метода.
десигнатор уточненного метода ¦ ----------------------- ---- --------------------- L-T>¦ идентификатор +>¦ . +------->¦идентификатор метода+> ¦ ¦ объектного типа ¦ L---- ^ L--------------------- ¦ L----------------------- ¦ ¦ ----------------------- ¦ L>¦ inherited +----------- L-----------------------
Объектный тип, заданный в десигнаторе уточненного метода, должен быть таким же, как и включающий метод объектный тип, или соответствовать родительскому типу.
Для обозначения родительского объектного типа или объектного типа, включающего метод, можно использовать ключевое слово 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;
Как показывают эти примеры, активизация уточненных методов позволяет переопределяющему методу "вновь использовать" код мето- да, который он переопределяет.