Wie bekomme ich den Wert eines privaten statischen Feldes von einer class?

Gibt es eine Möglichkeit, den Wert eines privaten statischen Felds mithilfe der Reflektion von einer bekannten class zu erhalten?

Ja.

Type type = typeof(TheClass); FieldInfo info = type.GetField(name, BindingFlags.NonPublic | BindingFlags.Static); object value = info.GetValue(null); 

Dies ist für ein Feld. Ändern type.GetField für eine Eigenschaft type.GetField in type.GetProperty . Auf private Methoden können Sie auf ähnliche Weise zugreifen.

Ich denke, jemand sollte fragen, ob das eine gute Idee ist oder nicht? Es wird eine Abhängigkeit von der privaten Implementierung dieser statischen class erstellt. Die private Implementierung kann ohne Ankündigung geändert werden, wenn Benutzer von Reflection auf die private Implementierung zugreifen.

Wenn die beiden classn zusammenarbeiten sollen, sollten Sie das Feld intern erstellen und die Assembly der kooperierenden class in einem Attribut [assembly: InternalsVisibleTo] hinzufügen.

Wie oben erwähnt, können Sie wahrscheinlich System.Type::GetMembers() mit BindingFlags ::NonPublic | BindingFlags::Static ::NonPublic | BindingFlags::Static , jedoch nur, wenn Sie die richtige ReflectionPermission .

Wenn Sie volles Vertrauen haben, sollten Sie in der Lage sein:

 Type t = typeof(TheClass); FieldInfo field = t.GetField("myFieldName", BindingFlags.NonPublic | BindingFlags.Static); object fieldValue = field.GetValue(myObject); 

Wenn Sie dies jedoch auf einem System ohne volle Vertrauenswürdigkeit ausführen, schlägt der GetField-Aufruf fehl und dies funktioniert nicht.

Versuchen Sie etwas so:

 Type type = typeof(MyClass); MemberInfo[] members = type.GetMembers(BindingFlags.NonPublic | BindingFlags.Static); 

Ich würde denken, das sollte funktionieren.