title: The type must be convertible in order to use it as parameter in the generic class
body: <p>Given the current structure of generic classes.</p>
  
  <pre><code>public abstract class Foo&lt;TFoo, TBar&gt;
      where TFoo : Foo&lt;TFoo, TBar&gt;
      where TBar : Bar&lt;TFoo, TBar&gt;
  {
  }
  
  public abstract class Foo&lt;TFoo&gt; : Foo&lt;TFoo, BarImpl&gt;
      where TFoo : Foo&lt;TFoo&gt;
  {
  }
  
  public class FooImpl : Foo&lt;FooImpl&gt;
  {
  }
  
  public abstract class Bar&lt;TFoo, TBar&gt;
      where TFoo : Foo&lt;TFoo, TBar&gt;
      where TBar : Bar&lt;TFoo, TBar&gt;
  {
  }
  
  public abstract class Bar&lt;TFoo&gt; : Bar&lt;TFoo, BarImpl&gt;
      where TFoo : Foo&lt;TFoo&gt;
  {
  }
  
  public class BarImpl : Bar&lt;FooImpl&gt;
  {
  }
  </code></pre>
  
  <p>What I want is to set a default <code>Bar</code> on each implementation of <code>Foo&lt;TFoo&gt;</code>. 
  At some other part in the code an instance of <code>TBar</code> is created which  fails in case it is <code>Bar&lt;TFoo&gt;</code> as this is an <code>abstract</code> class.</p>
  
  <p>However, the following error is thrown and I don't get the point what I can do or if this even possible at all.</p>
  
  <blockquote>
    <p>The type 'BarImpl' must be convertible to 'Bar' in order to use it as parameter 'TBar' in the generic class 'Foo'</p>
  </blockquote>
  
  <p>I already tried to let <code>BarImpl</code> derive from <code>Bar&lt;FooImpl, BarImpl&gt;</code> which had no effect.</p>
  
  <p>Changing it to</p>
  
  <pre><code>public abstract class Foo&lt;TFoo&gt; : Foo&lt;TFoo, Bar&lt;TFoo&gt;&gt;
      where TFoo : Foo&lt;TFoo&gt;
  {
  }
  
  public abstract class Bar&lt;TFoo&gt; : Bar&lt;TFoo, Bar&lt;TFoo&gt;&gt;
      where TFoo : Foo&lt;TFoo&gt;
  {
  }
  </code></pre>
  
  <p>will work until the object of type <code>Bar&lt;TFoo&gt;</code> is intantiated (because of it's abtract).</p>