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(); } }