Ich bin ein absoluter Neuling bei Reflexion in C#. Ich möchte mit Reflection auf alle privaten Felder einer Klasse zugreifen, einschließlich derer, die vererbt werden.C#: Zugriff auf vererbte private Instanz Mitglieder durch Reflexion
Es ist mir gelungen, auf alle privaten Felder zuzugreifen, ausgenommen diejenigen, die vererbt werden, sowie alle öffentlichen und geschützten geerbten Felder. Ich konnte jedoch nicht auf die privaten, geerbten Felder zugreifen. Das folgende Beispiel zeigt:
class A
{
private string a;
public string c;
protected string d;
}
class B : A
{
private string b;
}
class test
{
public static void Main(string[] Args)
{
B b = new B();
Type t;
t = b.GetType();
FieldInfo[] fields = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic
| BindingFlags.Instance);
foreach(FieldInfo fi in fields){
Console.WriteLine(fi.Name);
}
Console.ReadLine();
}
}
Dies kann das Feld B.a.
Ist das überhaupt möglich? Die naheliegende Lösung wäre, die privaten, geerbten Felder in geschützte Felder umzuwandeln. Dies ist jedoch im Moment außer Kontrolle.
Anstelle der "if" -Klausel, um vererbte Felder zu ignorieren, können Sie BindingFlags.DeclaredOnly angeben. – Timwi
ohne Verwendung von BaseType für einen Type, können wir weiterhin auf private Member der Basisklasse zugreifen. Nein, das löst kein wirkliches Problem für mich, aber ich bin nur neugierig, weil ich mit der BaseType-Eigenschaft der Type-Klasse davon ausgehe, dass ich (während ich es schreibe) auf Childs-Basisklassenmitglieder zugreife BaseType-Eigenschaft, um das gleiche zu erreichen? – Zenwalker