如果我加载一个程序集,并获得给定类型的静态只读字段,并且我希望该字段在静态构造函数上初始化,并且我在该字段上调用GetValue,它是否有值(因为我是访问某个类型的字段,因此需要进行类型初始化)?
(不,我不打算从反射中调用静态构造函数......)
答案 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