title: How can I create object in abstract class without having knowledge of implementation?
body: <p>Is there a way to implement the "CreateNode" method in my library abstract below?  Or can this only be done in client code outside the library?   I current get the error "Cannot create an instance of the abstract class or interface 'ToplogyLibrary.AbstractNode"</p>
  
  <pre><code>public abstract class AbstractTopology&lt;T&gt;
  {
      // Properties
      public Dictionary&lt;T, AbstractNode&lt;T&gt;&gt; Nodes { get; private set; }
      public List&lt;AbstractRelationship&lt;T&gt;&gt; Relationships { get; private set; }
  
      // Constructors
      protected AbstractTopology()
      {
          Nodes = new Dictionary&lt;T, AbstractNode&lt;T&gt;&gt;();
      }
  
      // Methods
      public AbstractNode&lt;T&gt; CreateNode()
      {
          var node = new AbstractNode&lt;T&gt;();  // ** Does not work **
          Nodes.Add(node.Key, node);
          }
      }
   }
  
      public abstract class AbstractNode&lt;T&gt;
      {
          public T Key { get; set; }
      }
  
      public abstract class AbstractRelationship&lt;T&gt;
      {
          public AbstractNode&lt;T&gt; Parent { get; set; }
          public AbstractNode&lt;T&gt; Child { get; set; }
  
      }
  </code></pre>