I needed some help understanding recursive generics in C#.
I came across this code:
public abstract class Value<T> where T : Value<T>
{
....
}
public class UserId: Value<UserId>
{
}
I am confused by the part where the Value<T>
is used on both sides of the where clause. Can someone please explain what the code does?
It's known as a "Curiously recurring template pattern" . C# examples here and here. Often used for fluent syntax of interface types in order to keep the generic type "known" to the base implementation.