olarak ayarlayın. Birden fazla sınıf içeren bir programım var. temel düzeni aşağıdaki gibidir:C# - Sınıfta yer alan özel alanı
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";
}
Şimdi başka aşağıdaki gibi ben vardır: çalıştığım çalıştı yöntemlerden
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);
}
}
Hiçbiri.
Oh yardım ve bunu türetilmiş alan num
yok bu yüzden Foo1
veya Foo
elde edilmemiş ise not defteri
Teşekkür
Bu şekilde yayınlayamazsınız, kodunuz '(Foo) 'ya da' (Foo1) testine' InvalidCastException 'atar. – thehennyy
Bir Foo2 örneği oluşturdunuz. Bu sınıf num adında bir üye içermiyor. Bu alana yazmanın kesinlikle hiçbir yolu yoktur. Ayrıca yansıma yardımcı olmaz. –
Sadece bu alana söz konusu başlık gibi türetilmiş bir sınıfta erişmek isterseniz (kodunuz türetilmiş sınıfta erişmeye çalışmaz) alanınıza erişimi kontrol eden korumalı bir özelliği uygulayarak normal OOP yolunu kullanın. Bu durumda yansımaya ihtiyacınız yok. –