一般在C中创建对象#
我想要做的是从XML保存文件加载对象。问题是这些对象可以在运行时由用户配置,这意味着我必须使用反射来获取存储在XML文件中的这些对象的名称和属性。一般在C中创建对象#
我是通过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
}
}
}
我需要把一些代码在我的评论是,但我不能有大的开关语句或任何东西,我的数组中的对象可以根据用户配置应用程序的方式进行更改
你想用Activator.CreateInstance(Type)
object instance = Activator.CreateInstance(menuDataObjectType);
这种高效地工作,您可能需要限制动态创建的实例来实现一个接口
ICommonInterface i = (ICommonInterface)Activator.CreateInstance(menuDataObjectType)
这样,动态创建的对象变为可用 - 你可以调用它的接口方法。
如果激活器返回一个“对象”类型,它是否可以解析为它的实际类型?例如,如果我只是把它塞进一个ArrayList,我可以做类似if(object [4]是TurboButton)吗? – DrLazer 2010-04-19 14:49:15
返回的对象是您传递给CreateInstance的类型的一个实例。你可以将它转换回你的类型。 (或使用is运算符等)。有几个CreateInstance的重载,您应该看看 - 包括一个接受字符串类型名称和字符串程序集名称的重载。 – JMarsch 2010-04-19 14:56:53
不错的人会做 – DrLazer 2010-04-19 15:20:22
我们可以看到该XML的一个片段吗? – devnull 2010-04-19 14:42:15
我回复@devnull - 我们可以看到XML吗? – 2010-04-19 15:06:38
我真的不能发布它,因为它完全界外的应用程序是什么,这是公司代码 - 对不起你们 试想一下,你平时的嵌套结构像 鱼缸 鱼 鲇鱼性取向=“好同志”/ 角鲨special_abilities = “玩长笛”/ /鱼 /fishtank 那种事 – DrLazer 2010-04-19 15:18:08