title: A little bit confusion with C# Generics, T, Abstraction ?
body: <p>I am a C# game maker with Unity. I have collectable management system.</p>
  
  <p>CollectableManager</p>
  
  <pre><code>public List&lt;CollectableParent&lt;Collectable&gt;&gt; collactableParentsList;
  </code></pre>
  
  <p>CollectableParent</p>
  
  <pre><code>public class CollectableParent&lt;T&gt; : CollectableRelatedMonoBehaviour where T : Collectable
  </code></pre>
  
  <p>SpawnPointDefinedCollectableParent</p>
  
  <pre><code>public class SpawnPointParentDefinedCollectableParent&lt;T&gt; : CollectableParent&lt;T&gt; where T : Collectable
  </code></pre>
  
  <p>Collectable</p>
  
  <pre><code>public abstract class Collectable : CollectableRelatedMonoBehaviour, IHasPlayableSound
  </code></pre>
  
  <p>Collectable_Money</p>
  
  <pre><code>public class Collectable_Money : Collectable
  </code></pre>
  
  <p>CollectableParent_Money</p>
  
  <pre><code>public class CollectableParent_Money : SpawnPointParentDefinedCollectableParent&lt;Collectable_Money&gt;
  </code></pre>
  
  <p><strong>PROBLEM</strong></p>
  
  <p>"collactableParentsList" in CollectableManager does not accept <code>SpawnPointParentDefinedCollectableParent&lt;Collectable_Money&gt;</code> as item when T is defined as "Collectable_Money", it is derived from "Collectable". If I do this <code>SpawnPointParentDefinedCollectableParent&lt;Collectable&gt;</code>, it is accepted as item into list. </p>