静态构造函数BEFORE反射

时间:2011-02-22 16:33:06

标签: c# reflection

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

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

1 个答案:

答案 0 :(得分: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);
    }
}

输出:

5