interface ITest { void Test (); } class Tester where T : ITest, new () { public void Do () { new T ().Test (); } } class Reference : ITest { public void Test () { } } struct Value : ITest { public void Test () { } } class C { public static void Main () { new Tester ().Do (); new Tester ().Do (); } }