Рекурсивный параметр универсального типа в C # - PullRequest
2 голосов
/ 08 октября 2019

Мне нужна была помощь в понимании рекурсивных обобщений в C #.

Я сталкивался с этим кодом:

public abstract class Value<T> where T : Value<T>
{
    ....
}

public class UserId: Value<UserId>
{
}

Я смущен той частью, где Value<T> используется с обеих сторониз пункта, где. Может кто-нибудь объяснить, что делает код?

Ответы [ 2 ]

5 голосов
/ 08 октября 2019

Он известен как " Любопытно повторяющийся шаблон ". Примеры C # здесь и здесь . Часто используется для свободного синтаксиса типов интерфейса, чтобы универсальный тип был «известен» базовой реализации.

2 голосов
/ 08 октября 2019

Это рекурсивный параметр универсального типа.

Это означает, что T должно быть значением T.

Это нормально, что трудно понять, и я обнаружил, что это трудно объяснить ... извините.

Кто-то должен быть в состоянии объяснить лучше.

Рекурсивные обобщения

Ограничения рекурсивного обобщения

...