嵌套类:无法访问静态上下文中的非静态字段

时间:2012-06-11 23:46:47

标签: c# nested-class

我有一个带有一些内部变量的C类。它有一个嵌套的类N,它想要访问C中的变量。虽然C有一些静态方法和变量,但C和N都不是静态的。当我尝试从N中访问C中的非静态变量时,我得到了波浪形的下划线和消息“无法访问静态上下文中的非静态字段[fieldname]”。

这似乎与嵌套类有关,因为我可以从封闭类本身访问变量。

ReSharper建议我制作_t静态,但这不是一个选择。我该如何处理?

public sealed partial class C
{
    string _t;

    class N
    {
        void m()
        {
            _t = "fie"; // Error occurs here
        }
    }
}

1 个答案:

答案 0 :(得分:12)

这不是Java,你没有内部类。

嵌套类的实例不与外部类的任何实例相关联,除非您通过在构造函数中存储引用(也就是句柄/指针)来建立关联。

public sealed partial class C
{
    string _t;

    class N
    {
        readonly C outer;

        public N(C parent) { outer = parent; }

        void m()
        {
            outer._t = "fie"; // Error is gone
        }
    }
}