title: Upcasting with a generic type parameter
body: <p>Is it possible to "upcast" from a generic class based on T, into a generic class based on something more general than T?</p>
  
  <p>For instance, say I have a class named <code>Derived</code> that inherits from a class named <code>Base</code>. Can I ever do something like this:</p>
  
  <pre><code>List&lt;Derived&gt; der = new List&lt;Derived&gt;();
  List&lt;Base&gt; bas = (List&lt;Base&gt;) der;
  </code></pre>
  
  <p>Or, using interfaces, is it ever possible to do something like this:</p>
  
  <pre><code>List&lt;MyClonableType&gt; specific = new List&lt;MyClonableType&gt;();
  List&lt;IClonable&gt; general = (List&lt;IClonable&gt;)specific;
  </code></pre>
  
  <p>As written here, each of these examples fails with an <code>InvalidCastException</code>. The question we're arguing about is whether it's actually impossible, or simply a syntax error that could be fixed if we knew how.</p>