Как изрично да се извика виртуалният метод на дядо

Проблемът е следният. Да приемем, че има йерархия от класове, които се припокриват със същия виртуален (или динамичен - няма значение) метод и в една от реализациите на този метод искате да извикате виртуалния метод на предшественика на вашия предшественик. Новият обектен модел на Delphi позволява само извикване на методи на своя предшественик (с помощта на наследената ключова дума) или извикване на методи на клас с префикс на тип клас (например TLevel1.ClassName).

Този проблем не може да бъде разрешен със стандартни средства. Но можете да осъществите необходимото обаждане. Освен това, по начина, показан по-долу, можете да извикате всеки метод за всеки клас, но в този случай цялата отговорност за правилната работа с методи и полета пада върху програмиста. По-долу в метода VirtualFunction на класа TLevel3 се извиква методът на класа TLevel1, а във функцията Level1Always методът на класа TLevel1 винаги се извиква за някой от наследниците му.

TLevel1 = клас (TComponent)

функция VirtualFunction: низ; виртуален;

TLevel2 = клас (TLevel1)

функция VirtualFunction: низ; заместване;

TLevel3 = клас (TLevel2)