Статический конструктор ДО отражения - PullRequest
0 голосов
/ 22 февраля 2011

Если я загружу сборку и получу статическое поле только для чтения данного типа, и я ожидаю, что это поле будет инициализировано в статическом конструкторе, и я вызову GetValue для этого поля, будет ли оно иметь значение (так как я доступ к полю типа, поэтому его нужно инициализировать)?

(Нет, я не планирую вызывать статический конструктор из отражения ...)

1 Ответ

6 голосов
/ 22 февраля 2011

Мне кажется, что да.

// In SomeAssembly.dll
public class TestClass
{
    public static readonly int Field;

    static TestClass()
    {
        Field = 5;
    }
}

// In its own assembly
public class Program
{
    public static void Main()
    {
        BindingFlags bindingFlags = BindingFlags.Static | BindingFlags.Public;

        Assembly someAssembly = Assembly.LoadFile(@"Path\To\SomeAssembly.dll");

        object field = someAssembly.GetType("TestClass")
                                   .GetField("Field", bindingFlags)
                                   .GetValue(null);

        Console.WriteLine(field);
    }
}

Вывод:

5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...