静态构造函数BEFORE反射

TDa*_*ver 0 c# reflection

如果我加载一个程序集,并获得给定类型的静态只读字段,并且我希望该字段在静态构造函数上初始化,并且我在该字段上调用GetValue,它是否有值(因为我正在访问一个字段在一个类型,所以它需要是typeinitialized)?

(不,我不打算从反射中调用静态构造函数......)

Dan*_*Tao 6

看起来对我来说是对的.

// 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

5

  • @Richard:我确实尝试过,是的,它也适用于那种情况......我会更新答案. (2认同)