// using System; [assembly:CLSCompliant(true)] public class Outer { T value; public Outer(T value) { this.value = value; } public class Inner1A : Outer { public Inner1A(T value) : base(value) { } } public class Inner1B : Outer { U value2; public Inner1B(T value1, U value2) : base(value1) { this.value2 = value2; } } } public class Example { public static void Main() { var inst1 = new Outer("This"); Console.WriteLine(inst1); var inst2 = new Outer.Inner1A("Another"); Console.WriteLine(inst2); var inst3 = new Outer.Inner1B("That", 2); Console.WriteLine(inst3); } } // The example displays the following output: // Outer`1[System.String] // Outer`1+Inner1A[System.String] // Outer`1+Inner1B`1[System.String,System.Int32] //