假设我有这两个类:
public class A<T> where T : IEntityWithID, new()
{
private static EntityInfo entityInfo = B.GetEntityInfo(typeof(T));
private static IEnumerable TestCases
{
// Do work with entityInfo...
}
}
private static class B
{
private static IList<EntityInfo> entityInfoList = B.GetEntityList();
public static EntityInfo GetEntityInfo(Type type)
{
return entityInfoList.Single(e => e.Types.Contains(type));
}
private static IList<EntityInfo> GetEntityList()
{
// Builds a list of EntityInfo's...
}
}
B类中的entityInfoList是否保证在A类中调用B.GetEntityInfo()之前进行初始化和填充?
答案 0 :(得分:5)
是的,保证。以下是MSDN的摘录:
编辑:正如所指出的那样,你最终可能会遇到2个静态类相互依赖进行初始化的情况,这可能会让你遇到麻烦,但只要情况不是这样,你就可以了。程序无法准确指定何时加载类。然而, 保证加载并初始化其字段 它的静态构造函数在引用类之前调用 第一次参加你的课程。
答案 1 :(得分:4)
不,如果你有循环依赖关系,那么在该类的静态初始化完成之前,可以从类中运行代码。
以下是初始化为5
的静态字段的简单示例,但外部类会观察该字段为null
:
public class A
{
public static void Foo()
{
Console.WriteLine(B.bar == null);
}
}
public class B
{
public static readonly object bar = Foo();
public static object Foo()
{
A.Foo();
return 5;
}
}
private static void Main(string[] args)
{
var bar = B.bar;
}
这将打印true
。