Как изменить значение статического поля только для чтения, используя отражение в c #? - PullRequest
5 голосов
/ 05 января 2012

Метод SetFields в классе fieldInfo принимает объекты в качестве первого параметра.Есть ли способ изменить значение статических полей только для чтения, используя отражение в C #?

Пока у меня

var field = typeof(ClassName).GetField("FieldName",BindingFlags.Instance|BindingFlags.NonPublic);

Ответы [ 2 ]

7 голосов
/ 05 января 2012

Если вы хотите получить статическое поле, вам следует использовать BindingFlags.Static вместо BindingFlags.Instance, так как последнее относится к полям экземпляра.

Затем вы можете использовать field.SetValue(null, newValue) для установки значения. Обратите внимание, что null может быть передано в качестве целевого параметра, поскольку экземпляр объекта не требуется. Если вы обладаете достаточными привилегиями, рефлексия с радостью изменит значение поля только для чтения.

3 голосов
/ 05 января 2012

Ты рядом. Ваш BindingFlag неверен. Instance означает поле экземпляра. Вместо этого вы должны использовать BindingFlags.Static:

var field = typeof(ClassName).GetField("FieldName",BindingFlags.Static|BindingFlags.NonPublic);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...