私は複数のクラスを含むプログラムを持っていますので、互いに継承しています。基本的なレイアウトは次のようになります。c# - 継承クラスのプライベートフィールドを設定
public class Foo2
{
public string junk1 = "bleh"; // Not useful
}
public class Foo1 : Foo2
{
private int num = 2; // I want to access this
private string junk2 = "yo";
}
public class Foo : Foo1
{
public string junk3 = "no";
}
を今すぐ別に続かないように私が持っている:私は働いてみたメソッドの
public class access // I used Reflection
{
private Foo2 test = new Foo(); // The only thing important here is that test is Foo2
private void try1() // This was my frist attempt(It didn't work)
{
Foo tst = (Foo)test;
tst.GetType().GetField("num", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(tst, 5);
}
private void try2() // Second attempt also didn't work
{
Foo1 tst = (Foo1)test;
tst.GetType().GetField("num", BindingFlags.NonPublic | BindingFlags.Instance).SetValue(tst, 5);
}
}
なし。
ああを助け、私はそれが派生フィールドnum
を持っていないので、Foo1
またはFoo
から派生していないメモ帳に
おかげ
あなたはそのようにキャストできません。あなたのコードは '(Foo)test'または'(Foo1)test'で 'InvalidCastException'を投げます。 – thehennyy
Foo2のインスタンスを作成しました。そのクラスにはnumというメンバーが含まれていません。そのフィールドに書き込む方法は全くありません。また、反省は役に立たない。 –
フィールドのアクセスを制御する保護されたプロパティを実装することによって、通常のOOP方法を使用して、派生クラスのこのフィールドにアクセスしたいだけです(コードは派生クラスでアクセスしようとしません)。その場合、あなたは反射を必要としません。 –