Как написать хороший шаблон с любопытным повторением шаблона (CRTP) в C #

Некоторое время назад я хотел создать свой собственный картограф данных, который был бы намного проще, чем ваш средний ORM. При этом я обнаружил необходимость иметь доступ к информации о типах наследуемых классов в моем базовом классе. Моей первой мыслью была рефлексия, но она слишком медленная (если вы используете рефлексию, посмотритеFasterflect как это "почти" устраняет проблемы производительности отражения).

Поэтому я обратился к решению, которое, как позже выяснил, имело собственное имя: шаблон любопытно повторяющегося шаблона. Это в основном решило мою проблему, но научиться правильно реализовывать этот шаблон было немного сложным. Два главных вопроса, которые мне пришлось решить, были:

1) Как я могу позволить своему потребляющему коду работать с моими общими объектами, не зная общих параметров, с которыми были созданы объекты?

2) Как я могу наследовать статические поля в C #?

Сложной частью было выяснить вопросы. Когда я понял, что мне нужно сделать, решить эти вопросы стало довольно легко. Если вы обнаружите, что нуждаетесь в CRTP, вам, вероятно, придется отвечать на эти вопросы ... они, кажется, идут рука об руку.

Ответы на вопрос(1)

Ваш ответ на вопрос