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

Когда вы используете await, функция, выполняющая ваш код, должна быть помечена как асинхронная, что-то вроде:

async function _your_function_name() {
  ...

  let accounts = await web3.eth.getAccounts()
  let balance = await instance.getBalance(accounts[0])

  ...
}

Вы можете также подумать об использовании асинхронного IIFE, чтобы избежать пометки всей функции как асинхронной, даже если мне не хватает веской причины для этого:

...

let accounts
let balance

(async () => {
  accounts = await web3.eth.getAccounts()
  balance = await instance.getBalance(accounts[0])
})()

...

Вот более подробное объяснение: https://developer.mozilla.org/en-US/docs/Web/JavaScript/ Справка / отчетность / async_function

32
задан BartoszKP 20 January 2016 в 10:28
поделиться

5 ответов

Да.

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

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

66
ответ дан 27 November 2019 в 20:20
поделиться

Как указано выше можно, вероятно, использовать System.Type::GetMembers() с BindingFlags ::NonPublic | BindingFlags::Static, но только если у Вас есть право ReflectionPermission .

2
ответ дан 27 November 2019 в 20:20
поделиться

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

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

5
ответ дан 27 November 2019 в 20:20
поделиться

Если у Вас есть полное доверие, необходимо быть в состоянии сделать:

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

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

0
ответ дан 27 November 2019 в 20:20
поделиться

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

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

я думал бы, что это, должен работать.

-1
ответ дан 27 November 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: