В то время как назад я хотел создать свой собственный картограф данных, который был бы намного проще, чем ваш средний ORM. При этом я нашел необходимость иметь доступ к типу информации о наследовании классов в базовом классе. Моя первая мысль была отражением, но она слишком медленная (если вы используете рефлексию, проверьте Fasterflect, поскольку она почти "устраняет проблемы с производительностью отражения" ).
Итак, я обратился к решению, которое позже я узнал, если у него есть собственное имя: Curiously Recurring Template Pattern. Это в основном решило мою проблему, но научиться правильно реализовывать эту схему было немного сложной задачей. Два основных вопроса, которые я должен был решить:
1) Как я могу позволить моему потребительскому коду работать с моими общими объектами без необходимости знать общие параметры, с которыми были созданы объекты?
2) Как я могу наследовать статические поля в С#?
Сложная часть на самом деле выясняла вопросы. Как только я понял, что мне нужно сделать, решение этих вопросов было довольно простым. Если вы нуждаетесь в CRTP, вам, скорее всего, придется отвечать на эти вопросы... они, похоже, идут рука об руку.