リフレクションで親クラスのフィールドが取得できなくて悩みました。
GetFieldする時は自クラス内のメンバーにしかアクセスできないようです。
public class ParentClass
{
private int a;
}
public class ChildClass : ParentClass
{
private int b;
}
var childClass = new ChildClass();
//これはChildClassにaというフィールドがないため例外になる。
var field = typeof(ChildClass).GetField("a", BindingFlags.Instance | BindingFlags.NonPublic);
var field = typeof(ChildClass).BaseType.GetField("a", BindingFlags.Instance | BindingFlags.NonPublic);
var a = field.GetValue(childClass);
field.SetValue(childClass , true);
typeof(ChildClass).BaseType.GetField()
というようにBaseTypeを挟むのがミソですね。
フィールドが取得できれば、field.GetValueなりfield.SetValueなりで値を利用できます。
コメント