class Internal { } public class Public { } class X { public class NestedPublic { } internal class NestedAssembly { } protected internal class NestedFamilyAndAssembly { } protected class NestedFamily { } private class NestedPrivate { } static void Main () { } } public class A : Public { } class B : Public { } class C : Internal { } class D : X.NestedPublic { } class E : X.NestedAssembly { } class F : X.NestedFamilyAndAssembly { } public class Y { public class YA : Public { } class YB : Internal { } class YC : X.NestedPublic { } class YD : X.NestedAssembly { } class YE : X.NestedFamilyAndAssembly { } internal class YF : Internal { } internal class YG : X.NestedAssembly { } internal class YH : X.NestedFamilyAndAssembly { } internal enum YI { A, B } internal void Test (YI yi) { } } public class Z { public class P : Y.YA { } } class W : X { public class WA : NestedPublic { } public class WB : NestedAssembly { } public class WC : NestedFamilyAndAssembly { } internal class WD : NestedPublic { } internal class WE : NestedFamilyAndAssembly { } private class WCA { } private class WCB { public class WCD { public class WCE : WCA { } } } } class G { public void Test (X x) { } private enum Foo { A, B }; enum Bar { C, D }; private class I { public class J { public void Test (Foo foo) { } } } } public class H { public void Test (int[] a) { } } internal interface L { void Hello (string hello); } public class M : L { public void Hello (string hello) { } }