Как получить значение частного статического поля из класса?

Есть ли способ получить значение частного статического поля из известного класса с использованием отражения?

Ответ 1

Да.

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

Это поле. Для свойства измените type.GetField на type.GetProperty. Вы также можете получить доступ к приватным методам аналогичным образом.

Ответ 2

Я полагаю, кто-то должен спросить, хорошая ли это идея или нет? Это создает зависимость от частной реализации этого статического класса. Частная реализация может быть изменена без уведомления, предоставленного людям, использующим Reflection, для доступа к частной реализации.

Если два класса предназначены для совместной работы, подумайте о том, чтобы сделать внутреннее поле и добавить сборку взаимодействующего класса в атрибут [assembly: InternalsVisibleTo].

Ответ 4

Если у вас есть полное доверие, вы должны уметь:

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

Однако, если вы запустите это в системе без полного доверия, вызов GetField завершится неудачно, и это не сработает.

Ответ 5

Попробуйте что-то вроде этого:

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

Я думаю, что это должно сработать.