using System; public interface IHello[T] { } public interface IFoo[T] { GetHello () : IHello[T]; } public interface IBar[T] : IFoo[T] { } public class Foo[T] : IBar[T], IFoo[T] { public GetHello () : Hello { Hello (this); } this () { _ = Hello (this); } public class Hello : IHello[T] { public Foo : Foo[T]; public this (mutable foo : Foo[T]) { this.Foo = foo; } } } class X { static Main () : void { } } /* mono generated EXE verifies fine though, this is because of DefineMethodOverride bug in MS.NET NO-VERIFY BEGIN-OUTPUT END-OUTPUT */