--- /dev/null
+class BaseGeneric<T>
+{
+ public class InnerDerived
+ {
+ public InnerDerived (T t)
+ {
+ }
+ }
+
+ public class GenericInnerDerived<U>
+ {
+ public GenericInnerDerived (T t, U u)
+ {
+ }
+ }
+}
+
+class BaseConcrete : BaseGeneric<string>
+{
+}
+
+class Concrete_A : BaseGeneric<int>
+{
+}
+
+class Concrete_B : BaseConcrete
+{
+ InnerDerived foo1;
+}
+
+class BaseGeneric_2<T, U>
+{
+ public class InnerDerived
+ {
+ public InnerDerived (T t, U u)
+ {
+ }
+ }
+}
+
+class BaseGeneric_1<T> : BaseGeneric_2<T, string>
+{
+}
+
+class Concrete_2 : BaseGeneric_1<bool>
+{
+}
+
+
+class Program
+{
+ static void Main ()
+ {
+ new Concrete_B.InnerDerived ("abc");
+ new Concrete_A.InnerDerived (11);
+ new Concrete_A.GenericInnerDerived<int> (1, 2);
+ new Concrete_2.InnerDerived (false, "bb");
+ }
+}