Tag: crtp

如何在C#中编写一个好奇的重复模板模式(CRTP)

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

自反型参数约束:X 其中T:X – 任何更简单的替代方案?

我经常通过向其添加自引用(“反身”)类型参数约束来使简单的界面更复杂。 例如,我可能会这样做: interface ICloneable { ICloneable Clone(); } class Sheep : ICloneable { ICloneable Clone() { … } } //^^^^^^^^^^ Sheep dolly = new Sheep().Clone() as Sheep; //^^^^^^^^ 成: interface ICloneable where TImpl : ICloneable { TImpl Clone(); } class Sheep : ICloneable { Sheep Clone() { … } } //^^^^^ Sheep dolly = new […]