13

I have a class C with some internal variables. It has a nested class N that wants to access the variables in C. Neither C nor N are static, although C has some static methods and variables. When I try to access a non-static variable in C from N I get the squiggly underline and the message "Cannot access non-static field [fieldname] in static context".

This seems to have something to do with the nested class, since I can access the variable fine from the enclosing class itself.

ReSharper suggests I make _t static but that isn't an option. How do I deal with this?

public sealed partial class C
{
    string _t;

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

1 Answer 1

16

This isn't Java, and you don't have inner classes.

An instance of a nested class is not associated with any instance of the outer class, unless you make an association by storing a reference (aka handle/pointer) inside the constructor.

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
        }
    }
}
Sign up to request clarification or add additional context in comments.

2 Comments

The O'Reilly "Nutshell" book (Albahari & Albahari) says "A nested type ... can access the enclosing type's private members and everything else the enclosing type can access."
@Sisiutl: This has nothing to do with accessibility. Because of the rule "Nutshell" mentions, my code works even with private string _t;. Without that rule, you would need either internal or public. A static method also has access to private members, but needs to supply an instance reference before using non-static members.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.