Wie man ein gutes, kurioserweise wiederkehrendes Template-Muster (CRTP) in C # schreibt

Vor einiger Zeit wollte ich einen eigenen Daten-Mapper erstellen, der viel einfacher ist als Ihr durchschnittlicher ORM. Dabei stellte ich fest, dass auf die Typinformationen zum Erben von Klassen in meiner Basisklasse zugegriffen werden muss. Mein erster Gedanke war Reflexion, aber es ist zu langsam (wenn Sie Reflexion verwenden, überprüfen SieSchnellerFlex wie es "fast" die Leistungsprobleme der Reflexion beseitigt).

Also habe ich mich an eine Lösung gewandt, von der ich später erfuhr, dass sie ihren eigenen Namen hat: Das seltsam wiederkehrende Vorlagenmuster. Dies hat mein Problem größtenteils gelöst, aber das Erlernen der korrekten Implementierung dieses Musters war eine kleine Herausforderung. Die zwei Hauptfragen, die ich zu lösen hatte, waren:

1) Wie kann ich meinen konsumierenden Code mit meinen generischen Objekten arbeiten lassen, ohne die generischen Parameter kennen zu müssen, mit denen die Objekte erstellt wurden?

2) Wie kann ich statische Felder in C # erben?

Der herausfordernde Teil bestand darin, die Fragen herauszufinden. Sobald mir klar wurde, was ich tun musste, war es ziemlich einfach, diese Fragen zu lösen. Wenn Sie das CRTP benötigen, werden Sie wahrscheinlich feststellen, dass Sie diese Fragen beantworten müssen ... sie scheinen Hand in Hand zu gehen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage