Does C# have an equivalent of Java static nested class?

All C# nested classes are like Java static nested classes:

C#:

class Outer
{
    class Inner
    {
    }
}

Is like Java's:

class Outer
{
    static class Inner
    {
    }
}

In other words, an instance of Inner doesn't have an implicit reference to an instance of Outer.

There isn't the equivalent of a Java inner class in C# though.

The accessibility rules are somewhat different between the two languages though: in C#, the code in the nested class has access to private members in the containing class; in Java all code declared within one top-level type has access to all the other private members declared within that same top-level type.


Give this a look http://blogs.msdn.com/oldnewthing/archive/2006/08/01/685248.aspx

I am looking specifically at

In other words, Java inner classes are syntactic sugar that is not available to C#. In C#, you have to do it manually.

If you want, you can create your own sugar:

class OuterClass {
 ...
 InnerClass NewInnerClass() {
  return new InnerClass(this);
 }
 void SomeFunction() {
  InnerClass i = this.NewInnerClass();
  i.GetOuterString();
 }
}

Where you would want to write in Java new o.InnerClass(...) you can write in C# either o.NewInnerClass(...) or new InnerClass(o, ...). Yes, it's just a bunch of moving the word new around. Like I said, it's just sugar.