入れ子になったクラス

C# では、クラスを入れ子にすることができます。以下は、サンプルプログラム。

public class Outside
{
  private String name;
  
  public Outside( String n )
  {
    name = n;
  }

  internal class Inside
  {
    public void Draw( Outside o )
    {
      Console.WriteLine( "Name=" + o.name );
    }
  }
}

public class Test
{
  static void Main()
  {
    Outside o = new Outside( "Hello!" );
    //Console.WriteLine( o.name );//!<できない

    Outside.Inside i = new Outside.Inside();
    i.Draw( o );//!<できる
  }
}

出力は、以下のようになり、Outsideのメンバnameはprivateにもかかわらず、別のインスタンスからアクセスできます。

Name=Hello!