親クラスのprivateフィールドを取得・変更する(C# WPF)

C#

リフレクションで親クラスのフィールドが取得できなくて悩みました。
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なりで値を利用できます。

C#
スポンサーリンク
Once and Only

コメント