Как можно определить несколько классов с одним родителем в рамках одного типа?
Эм.....а почему нельзя кэшировать в "массив" типа ParentClass? 
Для каждого объекта кэша будут известны все его методы, а реализацию (или уточнение реализации) их берут на себя потомки.
Я насколько понимаю ООП, наследование и полиморфизм для того придумано....
хранить в типе objectах, а по нему смотреть какого он типа .GetType().ToString() и приводить к этому типу var A= (ЯтиПтИпа)object; далее делать с ним все что душе угодно. Но такое решение не идеал, масштабируется плохо.