Heim >Backend-Entwicklung >C++ >Wie kann ich mithilfe von Reflection in .NET auf private Felder zugreifen?
Zugriff auf private Mitglieder über .NET Reflection
In bestimmten Situationen erweist sich die Verwendung von Reflektion für den Zugriff auf private Felder innerhalb eines .NET-Objekts als vorteilhaft. Diese Anleitung veranschaulicht, wie Sie das private Feld _bar
mithilfe von Reflektion aus einer Klasse abrufen, trotz seines privaten Zugriffsmodifikators.
Felder mit Reflexion abrufen
Die .NET Reflection API bietet die Methode GetFields()
, die ein Array von FieldInfo
-Objekten für einen bestimmten Typ zurückgibt. Standardmäßig werden nur öffentliche Felder zurückgegeben. Um auf private Felder zuzugreifen, müssen wir entsprechende Bindungsflags angeben.
Bindungsflags verstehen
Bindungsflags steuern, welche Mitglieder in einen Reflexionsvorgang einbezogen werden. Für den privaten Feldzugang benötigen wir:
BindingFlags.NonPublic
: Beinhaltet nicht öffentliche Mitglieder (privat, intern, geschützt).BindingFlags.Instance
: Enthält Instanzfelder (im Gegensatz zu statischen Feldern).Codebeispiel: Zugriff auf ein privates Feld
Um auf das private _bar
-Feld der Foo
-Klasse zuzugreifen:
<code class="language-csharp">Type myType = typeof(Foo); FieldInfo[] fields = myType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance); foreach (FieldInfo field in fields) { // Example: Check for a custom attribute if (field.IsDefined(typeof(SomeAttribute), false)) { Console.WriteLine($"Found private field: {field.Name}"); } }</code>
Wichtiger Hinweis: Die Attributprüfung dient der Demonstration. Reflection ermöglicht den Abruf aller Feldinformationen (Typ, Wert, Modifikatoren usw.). Denken Sie daran, dass der direkte Zugriff auf private Mitglieder die Kapselung zerstören kann und mit Vorsicht verwendet werden sollte.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Reflection in .NET auf private Felder zugreifen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!