> 1. нужно указывать базовый класс
> 2. нужно делать cast. для этого нужно знать к какому базовому классу кастить.
Тут извиняйте, если бы были дженерики, можно было бы сделать
X++:
var x = SysExtensionAppClassFactory::getClassFromSysAttribute<MyBaseClass>(attribute)
И не дублировать тип.
Кстати в данном случае надо использовать не is - он вернет null если вдруг будет не ожидаемый тип а просто обявить явно тип без var - это будет все равно что строгий каст в C# (тип в скобочках).
> в семействе может быть несколько базовых с разной логикой. см FormLetter.
Дык все равно ты тут одижаешь какой-то один тип - класс или интерфейс, если разные, то надо либо делать разные плагины либо дальше кастить - без этого логически никак.