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”
public abstract class AbstractTopology<T>
{
// Properties
public Dictionary<T, AbstractNode<T>> Nodes { get; private set; }
public List<AbstractRelationship<T>> Relationships { get; private set; }
// Constructors
protected AbstractTopology()
{
Nodes = new Dictionary<T, AbstractNode<T>>();
}
// Methods
public AbstractNode<T> CreateNode()
{
var node = new AbstractNode<T>(); // ** Does not work **
Nodes.Add(node.Key, node);
}
}
}
public abstract class AbstractNode<T>
{
public T Key { get; set; }
}
public abstract class AbstractRelationship<T>
{
public AbstractNode<T> Parent { get; set; }
public AbstractNode<T> Child { get; set; }
}
Well what concrete node class do you want to be created? Is this perhaps something which should be left up to the concrete topology class? If so, you might want to make it abstract:
Then provide a concrete implementation in the concrete topology class.
Alternatively, you could make your class generic in the node type as well:
Then you could implement CreateNode like this:
Personally I get a little suspicious of designs involving this many abstract classes, but perhaps you’ve got good reasons.