public static void Main()
Console.WriteLine("Hello World");
Tree<string,Node,Link> tree = new Tree<string,Node,Link>();
tree.AddNode("root0", new Node());
public class Tree<Tkey, Tnode, Tlink> : ITree<Tnode, Tlink>
where Tnode : INode<Tnode, Tlink>
where Tlink : ILink<Tnode, Tlink>
public void AddNode(Tkey key, Tnode node)
public Tlink[] GetAdjacency(Tnode source)
throw new System.NotImplementedException();
public Tlink[] GetPrecedency(Tnode destination)
throw new System.NotImplementedException();
public interface ITree<TNode, TLink>
where TNode : INode<TNode, TLink>
where TLink : ILink<TNode, TLink>
TLink[] GetAdjacency(TNode source);
TLink[] GetPrecedency(TNode destination);
public interface INode<TNode, TLink>
where TNode : INode<TNode, TLink>
where TLink : ILink<TNode, TLink>
ITree<TNode, TLink> Tree { get; set; }
public interface ILink<TNode, TLink>
where TNode : INode<TNode, TLink>
where TLink : ILink<TNode, TLink>
ITree<TNode, TLink> Tree { get; set; }
TNode Source { get; set; }
TNode Destination { get; set; }
public class Node : INode<Node, Link>
public ITree<Node, Link> tree;
public ITree<Node, Link> Tree
public void GetAdjacency()
Link[] links = this.Tree.GetAdjacency(this);
for (int i = 0; i < links.Length; i++)
public class Link : ILink<Node, Link>
private ITree<Node, Link> tree;
private Node destination;
public ITree<Node, Link> Tree
get { return destination; }
set { destination = value; }