public class Grid where CT : Grid.GPD.GC, new () { public abstract class GPD { public GPD () { ctInst = new CT (); } public readonly CT ctInst; public abstract class GC { } } } public class H : Grid.GPD { public class MyCT : GC { // When no explicit default constructor is present GMCS fails to compile the file. // When it is present the execution crashes on mono. // public MyCT () {} } } public class TheTest { public static void Main (string[] args) { new H (); } }