C#无法在静态上下文中访问非静态成员字段,而实际上不在静态上下文中

任何人都可以解释为什么我得到错误“无法在静态上下文中访问非静态字段wtf,即使我不在静态上下文中。

我在行“public int variable = wtf.queuePosition;”上得到错误

class Test { public Test wtf = new Test(); public int variable = wtf.queuePosition; private int queuePosition; public Test() { queuePosition = 5; } } 

虽然我不是在静态的背景下。

实例成员变量的初始化是在执行构造函数的代码之前完成的。 这时,仍然没有this参考。

所以我怕你错了。 从编译器的角度来看,您处于静态上下文中。

从C#规范(17.4.5.2实例字段初始化) :

实例字段的变量初始值设定项无法引用正在创建的实例。 因此,在变量初始化程序中引用它是一个编译时错误,因为变量初始化程序通过简单名称引用任何实例成员是编译时错误。

您将变量分配给另一个变量中的属性值。 您的变量wtf是非静态的,但是类中的变量赋值是静态的。 因此,赋值’public int variable = wtf.queuePosition;’在静态上下文中。

您的示例中显示了一个不允许的明显原因。 您的代码将很快实现堆栈溢出exception。 因为Test的每个实例都在新建另一个Test实例,这将新增另一个实例……