繁体   English   中英

在泛型约束中使用类型

[英]Using type in generic constraint

我正在使用 C# 深入学习这本书,它提到一种约束形式在约束本身中使用类型参数。 那么这两者有什么区别:

public void Method(AClass<T> myobject) where T : ISomething //Here I say that T has to implement ISomething

public void Method(AClass<T> myobject) where T : ISomething<T> //I don't understand this

考虑您定义了一个非通用接口ISomething 第一行将T限制为实现该接口的类型。

现在考虑您定义了一个不同的通用接口ISomething<T> 第二行表示 T 被约束为实现该接口的类型,但进一步的限制是接口上的泛型参数必须设置为您指定的类型。

例如

interface ISomething<T> { /* methods */}

class MyClass: ISomething<MyClass> { /* methods */ }

查看MyClassISomething<T> 这就是约束所要求的。

C++ 程序员将此称为Curiously Recurring Template Pattern ( https://en.m.wikipedia.org/wiki/Curiously_recurring_template_pattern )。 别担心,当每个人第一次遇到它时,它都会融化每个人的心。 而且,如果你有一段时间不使用它,它不像骑自行车; 你需要重新学习

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM