2009-09-30 74 views
1

我有一些基础对象“汽车”,“狗”,“猫”他们实现了一个接口“IGWUIElement”。我有这些接口的列表:List myList。如何在实例化对象上使用反射调用方法?

在运行时我循环遍历我的元素列表并通过检查类的名称(使用反射)我需要填充它们的属性 - 这不是接口的一部分)。我有一个xml文档描述propeties和我应该分配给他们的价值。这是我的接口实例。

IGWUIElement newUIElement = (IGWUIElement)Activator.CreateInstance(result); 

我该如何从特定值(请注意数据类型仅限于int和字符串)调用其名称中的属性。每个对象都有不同的属性。

希望这是有道理...

/H4mm3r

回答

5

使用PropertyInfo.SetValue()

PropertyInfo piInstance = typeof(IGWUIElement).GetProperty("property_name"); 
piInstance.SetValue(newUIElement, value, null); 

更多msdn

4

你可以做到这一点,像这样:

IGWUIElement element = myList[0]; 

// Set a string property 
element.GetType().InvokeMember("SomeStringProperty", BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, Type.DefaultBinder, element, "The String Value"); 

// Set an int property 
element.GetType().InvokeMember("SomeIntProperty", BindingFlags.Instance | BindingFlags.Public | BindingFlags.SetProperty, Type.DefaultBinder, element, 3); 
相关问题