Общее создание объектов в C # - PullRequest
6 голосов
/ 19 апреля 2010

Я пытаюсь загрузить объекты из файла сохранения в формате XML. Проблема в том, что эти объекты настраиваются пользователем во время выполнения, то есть мне пришлось использовать отражение, чтобы получить имена и атрибуты этих объектов, хранящиеся в файле XML.

Я нахожусь в середине рекурсивного цикла по XML и до той части, где мне нужно создать объект, затем подумал ..... ах - не знаю, как это сделать: (

У меня есть массив, заполненный пустыми объектами (m_MenuDataTypes), по одному из каждого возможного типа. Моя функция рекурсивной загрузки выглядит следующим образом

private void LoadMenuData(XmlNode menuDataNode)
{
   foreach (object menuDataObject in m_MenuDataTypes)
   {
       Type menuDataObjectType = menuDataObject.GetType();
       if (menuDataObjectType.Name == menuDataNode.Name)
       {
          //create object
       }
   }
}

Мне нужно поместить код в мой комментарий, но у меня не может быть большого оператора switch или чего-то еще. Объекты в моем массиве могут меняться в зависимости от того, как пользователь настроил приложение.

Ответы [ 3 ]

13 голосов
/ 19 апреля 2010

Вы хотите использовать Activator.CreateInstance (Тип)

object instance = Activator.CreateInstance(menuDataObjectType);

для эффективной работы может потребоваться ограничение динамически создаваемых экземпляров для реализации интерфейса

ICommonInterface i = (ICommonInterface)Activator.CreateInstance(menuDataObjectType)

Таким образом, динамически созданный объект становится пригодным для использования - вы можете вызывать методы интерфейса для него.

2 голосов
/ 19 апреля 2010

Если вы создаете экземпляр графа объектов, подойдет ли XmlSerializer или DataContractSerializer?

1 голос
/ 19 апреля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...