在我的应用程序中使用反射我有两个类
public class FirstClass
{
public string someVar;
public SecondClass second;
public FirstClass()
{
second = new SecondClass();
}
}
public class SecondClass
{
public string anotherVar;
}
在我的主程序中,我有一个FirstClass实例
MainProgram()
{
Object obj = InstanceOfFirstClass() // reflected instance of first class
}
如何在obj中设置anotherVar的值?
答案 0 :(得分:2)
对于公共字段,这相对简单:
object obj = InstanceOfFirstClass();
object second = obj.GetType().GetField("second").GetValue(obj);
second.GetType().GetField("anotherVar").SetValue(second, "newValue");
如果字段不公开,那么您需要使用GetField
的重载,该重载需要BindingFlags
参数并设置NonPublic
标记。
在.Net 4中,您可以使用dynamic
:
dynamic obj = InstanceOfFirstClass();
obj.second.anotherVar = "newValue";
答案 1 :(得分:1)
您可以找到读取字段的示例,并通过反射设置字段的值 http://msdn.microsoft.com/en-us/library/6z33zd7h.aspx。 在你的情况下,它看起来像
Object myObject = InstanceOfFirstClass() // reflected instance of first class
Type myType = typeof(FirstClass);
FieldInfo myFieldInfo = myType.GetField("second",
BindingFlags.Public | BindingFlags.Instance);
// Change the field value using the SetValue method.
myFieldInfo.SetValue(myObject , //myobject is the reflected instance
value);//value is the object which u want to assign to the field);