The Stripe payment .NET API has a generic class definition like below and I'd like to understand why the constraint part StripeEntity<T> should be the type T.
public abstract class StripeEntity<T> : StripeEntity where T : StripeEntity<T>
From: https://github.com/stripe/stripe-dotnet/blob/master/src/Stripe.net/Entities/_base/StripeEntity.cs
I understand the generic syntax, but don't understand why the class is defined in this way, the thinking behind it. Is this a common pattern around generic classes and if so what are the benefits?