 <p>You can do like this (note that I have moved some of your generic parameters and constraints around).</p> <pre><code>public class MyType { public void doStuff(int i){} } public abstract class ABase&lt;T&gt;where T : class, new() { public abstract T method(int arg); } public class AChild : ABase&lt;MyType&gt; { override public MyType method(int arg) { MyType e = new MyType(); e.doStuff(arg); // no more error here return e; } } </code></pre>