Search code examples
c#.netgenericstypestype-parameter

Recursive generic type parameter in C#


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?


Solution

  • 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.