不久前,我想创建自己的数据映射器,它比普通的 ORM 简单得多。在这样做的过程中,我发现需要访问我的基类中继承类的类型信息。我的第一个想法是反射,但它太慢了(如果你使用反射,请查看Fasterflect,因为它“几乎”消除了反射的性能问题)。
所以我转向了一个解决方案,后来我发现它有自己的名字:The Curiously Recurring Template Pattern。这主要解决了我的问题,但是学习如何正确实现这种模式有点挑战。我必须解决的两个主要问题是:
1)如何让我的消费代码与我的通用对象一起工作,而无需知道创建对象的通用参数?
2) 如何在 C# 中继承静态字段?
具有挑战性的部分实际上是弄清楚问题。一旦我意识到我需要做什么,解决这些问题就很容易了。如果您发现自己需要 CRTP,您可能会发现自己需要回答这些问题……它们似乎齐头并进。