В вашем случае вам нужен словарь. Например:
Dictionary<string, Action> index = new Dictionary<string, Action>();
index["a.b.c"] = () => Console.WriteLine("a.b.c");
index["a.b.c"]();
Если хочется именно через классы - то вместо делегата легко можно использовать экземпляр любого нужного класса. Если хочется вот прям совсем красиво и именно дерево, то в классе опять же создаете словарь и
перегружаете индексатор, чтобы он разбивал строку по разделителям и осуществлял поиск дальше вглубь дерева. И тогда можно будет делать что-то типа такого:
var tree = new MyTree() {
{
"a", new MyTree() {
{
"b", new MyTree(() => Console.WriteLine("a.b.c"))
}
}
}
}
tree["a.b"]();
И да, как уже сказали ранее - можно и через рефлексию, но зачем, если есть словари и они проще и работают из коробки?