任何人都可以解释为什么我会收到错误 “无法在静态上下文中访问非静态字段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;
}
}
答案 0 :(得分:4)
虽然我不在静态环境中。
实例成员变量的初始化是在执行构造函数的代码之前完成的。目前,仍然没有this
引用。
所以我害怕你的错。从编译器的角度来看,是在静态上下文中。
来自C# specification (17.4.5.2 Instance field initialization):
实例字段的变量初始值设定项无法引用正在创建的实例。因此,引用它是编译时错误 这在变量初始值设定项中,因为变量初始化程序通过简单名称引用任何实例成员是编译时错误。
答案 1 :(得分:0)
您正在将变量分配给另一个变量中的属性值。您的变量wtf是非静态的,但是类中的变量赋值是静态的。因此,赋值'public int variable = wtf.queuePosition;'在静态上下文中。
在您的示例中显示了一个不允许的明显原因。您的代码将很快实现堆栈溢出异常。因为Test的每个实例都在新建另一个Test实例,这将会新增另一个实例......