Вы должны посмотреть этот пост от Айенде: WCF, Mocking и IoC: Oh MY! . Где-то рядом с дном находится метод GetCreationDelegate, который должен помочь. В основном это делает:
string typeName = ...;
Type proxyType = Type.GetType(typeName);
Type type = typeof (ChannelFactory<>).MakeGenericType(proxyType);
object target = Activator.CreateInstance(type);
MethodInfo methodInfo = type.GetMethod("CreateChannel", new Type[] {});
return methodInfo.Invoke(target, new object[0]);
Из того, что я понимаю из вашего вопроса, вы храните базовые указатели объектов, но извне вы хотите оперировать ими как производными объектами, которыми они являются.
В этом случае крайне важно понизить рейтинг.
Хотя ваш вопрос расплывчатый, я вижу, что ваша ситуация очень похожа на элемент управления в диалоговом окне, где оба являются окнами, но говорят, что CheckBox - это специализированное окно, над которым вы хотите работать, в частности, с расширенными функциями.
Основные рамки используют приведение для этой проблемы, как MFC здесь .
В новой платформе Qt также используется приведение, как в функции findChildren .
Я надеюсь, что вы сможете оценить свое решение, учитывая эту информацию, и, возможно, помириться с ней.