public class A { public void MA1(T1 x) { } public void MA2(T1 x, T2 y) { } public class B { public void MB1(T1 x, T3 y) { } public void MB2(T1 x, T3 y, T4 z) { } } public class C { public void MC1(T1 x) { } public void MC2(T1 x, T5 y) { } public class D { public void MD1(T1 x, T6 y) { } public void MD2(T1 x, T6 y, T7 z) { } } } void Construct() { var a1 = new A(); a1.MA1(0); a1.MA2(0, ""); var a2 = new A(); a2.MA1(""); a2.MA2("", 0); var b1 = new A.B(); b1.MB1(0, ""); b1.MB2(0, "", false); var b2 = new A.B(); b2.MB1("", 0); b2.MB2("", 0, false); var c1 = new A.C(); c1.MC1(0); c1.MC2(0, false); var c2 = new A.C(); c2.MC1(""); c2.MC2("", false); var d1 = new A.C.D(); d1.MD1(0, false); d1.MD2(0, false, ""); var d2 = new A.C.D(); d2.MD1("", 0m); d2.MD2("", 0m, false); } }