C#泛型类类型参数和约束与泛型参数相同。

3
Stripe支付.NET API有以下的通用类定义,我想了解为什么约束部分的StripeEntity<T>应该是类型T
public abstract class StripeEntity<T> : StripeEntity where T : StripeEntity<T>

来源: https://github.com/stripe/stripe-dotnet/blob/master/src/Stripe.net/Entities/_base/StripeEntity.cs

我了解泛型语法,但不理解为什么要以这种方式定义类,背后的思想是什么。这是否是围绕泛型类的常见模式,如果是,有哪些好处?


你要找的名字是“奇妙递归模板模式”。(https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern) - Mathias R. Jessen
1个回答

2

它被称为奇妙的递归模式, 通常用于C++。

它有几个优点,特别是它是一种(非常有限的)静态多态形式,因此避免了调用虚函数的成本。然而,在C++中,这比在C#中更有价值,因为语言和运行时的构造方式不同。

.Net也有更好的处理方式,例如您可以通过使用属性和源生成器以更清晰的方式实现类似的功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接