Ошибка при выдаче при попытке лить Derived1 и Derived2 в объект типа TemplateControl, чтобы я мог добавить их в список объектов TemplateClass. Использование typeof (TemplateClass) .IsAssignableFrom (t) не соответствует типу, хотя он показывает базовый тип t как TemplateClass.Ошибка литья из производного класса в базовый класс
class abstract TemplateClass : UserControl {}
class Derived1 : TemplateClass {}
class Derived2 : TemplateClass {}
Type[] types = plugin.GetTypes(); //returning types for Derived1 and Derived2 correctly
foreach (Type t in types)
{
if (typeof(UserControl).IsAssignableFrom(t))
{
var control = (TemplateClass)Activator.CreateInstance(t); // casting error here
controls.Add(control);
}
}
РЕДАКТИРОВАТЬ:
информации я не включал выше, является то, что объект является плагин Assemblly загружен из библиотеки DLL. Dll - ModelControls. Таким образом, TemplateClass действительно является ModelControls.TemplateClass и Derived1 и Derived2 предшествует одному и тому же пространству имен. Когда я использую Model.TemplateClass в typeof(). IsAssignable (t) не находит подходящих типов, даже если создание нового массива типа, подобного приведенному ниже, отлично работает.
Type[] types = { typeof(ModelControls.Derived1), typeof(ModelControls.Derived2) };
Какой язык это? – Degustaf
Извините - C# - это язык –
Можете ли вы включить * точное сообщение об исключении? Если вы попытаетесь воспроизвести, определив эти классы и выполнив «(TemplateClass) Activator.CreateInstance (typeof (Derived2));', нет ошибки. Так что-то не так, как вы описываете. –