Этот вопрос является дополнением к this ранее задаваемым вопросам.Activator.CreateInstance() конкретный экземпляр класса
Мой ребенок классов, которые должны быть инициализированных и базовый класс, который будет тип списка
abstract public class baseClass
{
public baseClass()
{
}
}
public class child1 : baseClass
{
public child1() : base
{
}
}
public class child2 : baseClass
{
public child2() : base
{
}
}
Мой перечисление и менеджер класса
public enum ClassType
{
child1,
child2
}
public class Manager
{
private List<baseClass> _children;
public void Initialise(ClassType type)
{
var temp = Activator.CreateInstance(null, type.ToString());
//null = assembly which means this assembly
_children.Add(temp);
}
}
Класс менеджер был обновлен в предлагаемый ответ из моего предыдущего вопроса. Однако что-то еще не так. В приведенном выше случае я получаю сообщение об ошибке: TypeLoadException был необработанным: Не удалось загрузить тип 'child2' из сборки 'Something' Как я могу это изменить? Я попробовал другие варианты без успеха. (некоторые из них приводят к созданию класса, но при добавлении приводит к исключению nullReferenceException).
EDIT:
Хорошо я изменил код в:
string assemblyName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
Type objType = Type.GetType(string.Format("{0}.{1},{0}", assemblyName, type.ToString()));
var temp = (baseClass)Activator.CreateInstance(objType, 1);
// 1 is the parameter I need to add to the constructor.
_children.Add(temp);
теперь я получаю правильный класс, созданный, но я получаю NullReferenceException, когда я добавить класс к списку :(
Возможно, пожалуйста, проясните это? – Danahi
спасибо, все, что я должен исправить, теперь является пустой ссылкой, есть ли у вас ключ? – Danahi