Подтвердить что ты не робот

Можно ли установить этот статический частный член статического класса с отражением?

У меня есть элемент 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 для?

4b9b3361

Ответ 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)));