class A<U> { protected int foo; } class B<T> : A<T> { protected class N { public void Test (C b) { var v = b.foo; } } } class C : B<int> { public static void Main () { new C.N ().Test (new C ()); } }