しばらく前に、平均的な ORM よりもはるかに単純な独自のデータ マッパーを作成したいと考えていました。そうすることで、基本クラスの継承クラスの型情報にアクセスする必要があることがわかりました。私が最初に考えたのはリフレクションでしたが、遅すぎます (ただし、リフレクションを使用する場合は、リフレクションのパフォーマンスの問題を「ほぼ」解消するFasterflectを確認してください)。
そこで、後に独自の名前があることを知ったソリューションに目を向けました: The Curiously Recurring Template Pattern です。これで問題はほとんど解決しましたが、このパターンを正しく実装する方法を学ぶのは少し大変でした。私が解決しなければならなかった2つの主な質問は次のとおりです。
1) オブジェクトが作成されたジェネリック パラメータを知らなくても、コンシューマー コードをジェネリック オブジェクトで動作させるにはどうすればよいですか?
2) C# で静的フィールドを継承するにはどうすればよいですか?
挑戦的な部分は、実際に質問を理解することでした. 自分が何をする必要があるかがわかれば、これらの質問を解決するのは非常に簡単です。CRTP が必要な場合は、これらの質問に答える必要があることに気付くでしょう... これらは密接に関連しているようです。