Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中的递归泛型类型参数#_C#_.net_Generics_Types_Type Parameter - Fatal编程技术网

C# C语言中的递归泛型类型参数#

C# C语言中的递归泛型类型参数#,c#,.net,generics,types,type-parameter,C#,.net,Generics,Types,Type Parameter,我需要一些帮助来理解C#中的递归泛型 我遇到了以下代码: public abstract class Value<T> where T : Value<T> { .... } public class UserId: Value<UserId> { } 公共抽象类值,其中T:Value { .... } 公共类UserId:Value { } where子句的两边都使用了值,这让我感到困惑。有人能解释一下代码的作用吗?它是一个递归泛型类型参数 这

我需要一些帮助来理解C#中的递归泛型

我遇到了以下代码:

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

public class UserId: Value<UserId>
{
}
公共抽象类值,其中T:Value
{
....
}
公共类UserId:Value
{
}

where子句的两边都使用了
,这让我感到困惑。有人能解释一下代码的作用吗?

它是一个递归泛型类型参数

这意味着T必须是T的值

这是正常的,发现很难理解,我发现很难解释。。。对不起

其他人应该能够更好地解释


它被称为一个“”。C#示例和。通常用于定义接口类型,以使基本实现“了解”泛型类型。

这是泛型类型约束,这是C#泛型语法。它说抽象类
Value
接受一个泛型类型参数,该参数由变量
T
表示。
where
表示有一个限制,其中
T
必须是实现
值的类型@dee-see已经链接了更详细的文档,我的评论很快summary@maccettura我对where子句两边都使用Value的部分有点困惑。这不是递归的吗?它被称为“奇怪的循环模板模式”()。C#示例和@JesseC.Slicer感谢您提供的链接。他们很有帮助。而且,这个名字给了我谷歌更具体的东西,我学到了一些新东西。如果你能把它作为一个答案,我很乐意接受。再次感谢您。虽然这很好,但由于您命名了模式,用户可以自己找到文章,因此通常不赞成带有解释链接的答案。最好引用文章的相关部分(如果许可证是可修改的)。