Zugriff auf private C#-Felder über Reflection
Bei der objektorientierten Programmierung schützen private Felder Daten vor direktem Zugriff von außen. Allerdings bietet die Reflexion einen Mechanismus, um diese Einschränkung bei Bedarf zu umgehen.
Zugriff auf das private _bar-Feld
Sehen wir uns an, wie auf das private Feld _bar
innerhalb der Klasse Foo
zugegriffen wird, das zusätzlich mit einem benutzerdefinierten [SomeAttribute]
annotiert ist. Standardmethoden zum Abrufen von Attributen funktionieren nur mit öffentlichen Eigenschaften, sodass private Felder wie _bar
nicht erreichbar sind.
Private Mitglieder freischalten
Die Lösung liegt in der Verwendung spezifischer Bindungsflags während der Reflexion. BindingFlags.NonPublic
gewährt nicht-öffentlichen Mitgliedern Zugriff, während BindingFlags.Instance
sicherstellt, dass sich die Suche auf Instanzmitglieder konzentriert.
Codebeispiel
Der folgende Code demonstriert diesen reflektierenden Ansatz:
<code class="language-csharp">using System.Reflection; class Program { static void Main() { Type myType = typeof(Foo); FieldInfo[] fields = myType.GetFields( BindingFlags.NonPublic | BindingFlags.Instance); } }</code>
Hier verwendet GetFields
die angegebenen Bindungsflags, um sowohl öffentliche als auch private Instanzfelder abzurufen.
Zusammenfassung
Reflection ermöglicht in Kombination mit den entsprechenden Bindungsflags den Zugriff auf private Felder. Diese Technik erweist sich als unschätzbar wertvoll für die Untersuchung versteckter Daten oder die Manipulation von Objektinterna und stellt Entwicklern ein leistungsstarkes Werkzeug zur Codeanalyse und -manipulation zur Verfügung.
Das obige ist der detaillierte Inhalt vonWie kann Reflection für den Zugriff auf private Felder in C# verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!