对于静态字段,循环依赖关系会产生默认值。
static int a = b; // 0
static int b = a; // 0
它不适用于实例字段,因为它们不能互相引用。
int c = d; // CS0236 A field initializer cannot reference the non-static field, method, or property
int d = c; // CS0236
为什么允许静态字段?
答案 0 :(得分:3)
它不是循环依赖,而是静态和实例字段初始化的区别。
实例字段的变量初始值设定项无法引用 正在创建的实例。因此,引用是编译时错误 这在一个变量初始化程序中,因为它是一个编译时错误 一个变量初始化程序,通过一个引用任何实例成员 简单名称
简而言之,您无法在创建实例变量之前对其进行引用。
答案 1 :(得分:1)
更新:我用+4票看到了这个问题。从来没有想过这是一个如此简单的问题。我误解了这个问题,但我认为我的答案仍然有用,所以我不打算删除它。
这不是循环依赖问题。为什么允许第一个例子?请考虑一下:
在方法中,这没关系:
int a;
int b;
a = b;
b = a;
但不允许这样做:
int c;
c = d;
int d;
d = c;
类中字段/方法的声明的顺序并不重要(但 definitions 有顺序)