Я всегда понимал помощников классов как классы расширения или частичные классы. Они действуют как расширение для кода исходного базового класса. Если я скопирую интерфейсную часть кода и добавлю ее в базовый класс, а также сделаю это для реализации, код будет работать точно так же, как и с помощником. Это позволило мне всегда понимать полиморфизм в помощниках и почему они не могут переопределять методы из базового класса и тому подобное.
Но я обнаружил, что это не совсем так, потому что если это так, то почему они не позволяют переопределить методы родителя-предка базового класса?
Вот пример того, что я имею в виду (я приведу код только для заголовков без кода реализации):
type
TAncestor = class
public
procedure Test; virtual;
end;
TBase = class(TAncestor)
public
end;
Так почему следующий код неверен:
THelper = class helper of TBase
public
procedure Test; override;
end;
У меня ошибка:
Метод «Тест» не найден в базовом классе!