2

リフレクションを使用するアプリケーションには、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

public フィールドでは、これは比較的単純です。

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

フィールドが公開されていない場合は、フラグが設定された引数をGetField取るのオーバーロードを使用する必要があります。BindingFlagsNonPublic

.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 に答える