在阅读关于泛型的内容时,我遇到了这两个代码块,我想知道它们是否相同?
public abstract class Search<T, TCollection, TCriteria>
where TCollection : Collection<Name>
where T : Name
和
public abstract class Search<Name, Collection<Name>, TCriteria>
答案 0 :(得分:5)
不,因为在第二个中您指定了一个具体的泛型参数,但在第一个参数中,您指定泛型参数可以是where子句中指定类型的任何子类。
答案 1 :(得分:1)
正如Lasse指出的那样,你的第二个版本没有编译。如果您将其更改为
public abstract class Search<Name, Collection, TCriteria>
它会编译,但它不会做你想要它做的事情:这只是指定一个具有三个类型参数的泛型类,称为Name
,Collection
和TCriteria
。但它不会以任何方式限制它们,因此您可以创建一个类似Search<int, long, ulong>
的实例。
类型参数通常以T
开头,但语言不以任何方式强制执行。
所以区别在于第二个版本不起作用,使用第一个版本。