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

时间:2016-06-24 16:09:34

标签: c# static

任何人都可以解释为什么我会收到错误 “无法在静态上下文中访问非静态字段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;
    }
}

2 个答案:

答案 0 :(得分:4)

  

虽然我不在静态环境中。

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

所以我害怕你的错。从编译器的角度来看,在静态上下文中。

来自C# specification (17.4.5.2 Instance field initialization)

  

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

答案 1 :(得分:0)

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

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