Можно ли вообще установить значение статической (частной) переменной для объекта, который не был инициализирован? Для метода SetValue
требуется экземпляр, но я надеюсь, что есть способ обойти это.
Использование Reflection для установки значения статической переменной перед инициализацией объекта?
Ответы (2)
Для статических значений вы можете передать null для параметра экземпляра.
var type = typeof(SomeClass);
var field = type.GetField("SomeField", BindingFlags.NonPublic | BindingFlags.Static);
field.SetValue(null, 42);
person
JaredPar
schedule
04.02.2010
+1 увлекательно: то, что я нахожу немного пугающим в этой технике, это: если рассматриваемое поле доступно только для чтения: этот код не вызовет ошибку времени выполнения при выполнении.
- person BillW; 05.02.2010
Если рассматриваемое поле доступно только для чтения, оно просто ничего не делает? Или он все равно устанавливает значение? Это всего лишь .NET 3.5?
- person J.Hendrix; 05.02.2010
+1. Я думаю, что для частной статики вам нужны BindingFlags в качестве второго параметра метода GetField. BindingFlags.Static | BindingFlags.NonPublic
- person user420667; 07.03.2014
не могли бы вы создать статическую функцию, которая является общедоступной, и использовать ее для установки вашей частной статической переменной?
person
John Boker
schedule
04.02.2010
Я предполагаю, что это против типа, для которого у @Chance нет исходного кода.
- person Randolpho; 05.02.2010
Да, я не могу возиться с исходным кодом, и, к сожалению, я заблокирован в 2.0 без методов расширения. Спасибо хоть!
- person Chance; 05.02.2010
Методы расширения не могут получить доступ к закрытым данным. msdn.microsoft.com/en-us/library/bb383977.aspx
- person Steve Guidi; 05.02.2010