var i: integer; type t1 = class procedure p0; begin i := 1; end; end; // Обязательно промежуточный класс между t1 и t3 t2 = partial class(t1) end; // Обязательно t3 НЕ шаблонный t3 = partial class(t2) end; // Обязательно объявить t2 и t3 дважды t2 = partial class(t1) end; t3 = partial class(t2) // Обязательно вызвать p0 из второго тела t3 procedure p1 := self.p0; end; begin t3.Create.p1; assert(i = 1); end.