Можно ли установить этот статический частный член статического класса с отражением?
У меня есть элемент static class
с static private readonly
, который устанавливается через класс static constructor
. Ниже приведен упрощенный пример.
public static class MyClass
{
private static readonly string m_myField;
static MyClass()
{
// logic to determine and set m_myField;
}
public static string MyField
{
get
{
// More logic to validate m_myField and then return it.
}
}
}
Так как вышеприведенный класс является статическим классом, я не могу создать его экземпляр, чтобы использовать этот проход в вызове FieldInfo.GetValue()
для извлечения, а затем установить значение m_myField
. Есть ли способ, по которому я не знаю, использовать ли класс FieldInfo для получения и установить значение в статическом классе или это единственный вариант, чтобы реорганизовать класс, который я попросил unit test для?
Ответы
Ответ 1
Вот краткий пример, показывающий, как это сделать:
using System;
using System.Reflection;
class Example
{
static void Main()
{
var field = typeof(Foo).GetField("bar",
BindingFlags.Static |
BindingFlags.NonPublic);
// Normally the first argument to "SetValue" is the instance
// of the type but since we are mutating a static field we pass "null"
field.SetValue(null, "baz");
}
}
static class Foo
{
static readonly String bar = "bar";
}
Ответ 2
Это "нулевое правило" также применяется к FieldInfo.GetValue() для статического поля, например,
Console.Writeline((string)(field.GetValue(null)));