通常在C#中创建对象

时间:2010-04-19 14:40:03

标签: c# reflection

我要做的是从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
       }
   }
}

我需要在我的评论中放置一些代码,但我不能有一个大的转换语句或任何东西。我的数组中的对象可以根据用户配置应用程序的方式而改变。

3 个答案:

答案 0 :(得分:13)

您想使用Activator.CreateInstance(Type)

object instance = Activator.CreateInstance(menuDataObjectType);

为了使其高效工作,您可能需要限制动态创建的实例以实现接口

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

这样,动态创建的对象变得可用 - 您可以在其上调用接口方法。

答案 1 :(得分:2)

如果您要实例化对象图,XmlSerializer或DataContractSerializer会更合适吗?

答案 2 :(得分:1)