Cómo escribir un buen patrón de plantilla curiosamente recurrente (CRTP) en C #

Hace un tiempo quería crear mi propio mapeador de datos que sería mucho más simple que su ORM promedio. Al hacerlo, encontré la necesidad de tener acceso a la información de tipo de las clases heredadas en mi clase base. Mi primer pensamiento fue la reflexión, pero es demasiado lento (aunque si usas la reflexión, echa un vistazo aFasterflect ya que 'casi' elimina los problemas de rendimiento de la reflexión).

Así que recurrí a una solución que más tarde descubrí que tenía su propio nombre: el patrón de plantilla curiosamente recurrente. Esto resolvió principalmente mi problema, pero aprender a implementar correctamente este patrón fue un poco difícil. Las dos preguntas principales que tuve que resolver fueron:

1) ¿Cómo puedo dejar que mi código de consumo funcione con mis objetos genéricos sin necesidad de conocer los parámetros genéricos con los que se crearon los objetos?

2) ¿Cómo puedo heredar campos estáticos en C #?

La parte difícil fue en realidad averiguar las preguntas. Una vez que me di cuenta de lo que tenía que hacer, resolver estas preguntas fue bastante fácil. Si necesita el CRTP, es probable que tenga que responder estas preguntas ... parece que van de la mano.

Respuestas a la pregunta(1)

Su respuesta a la pregunta