2

在我使用反射的应用程序中,我有两个类

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 的值?

4

2 回答 2

2

使用公共字段,这相对简单:

    object obj = InstanceOfFirstClass();
    object second = obj.GetType().GetField("second").GetValue(obj);
    second.GetType().GetField("anotherVar").SetValue(second, "newValue");

如果这些字段不是公共的,那么您将需要使用带有标志集GetFieldBindingFlags参数的重载。NonPublic

在 .Net 4 中,您可以使用dynamic

dynamic obj = InstanceOfFirstClass();
obj.second.anotherVar = "newValue";
于 2013-06-22T05:40:52.917 回答
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);
于 2013-06-22T05:34:29.280 回答