有人能告诉我以下几点之间的区别
public class CarCollection<T>:List<T> where T:Car{}
Run Code Online (Sandbox Code Playgroud)
和
public class CarCollection:List<Car>{}
Run Code Online (Sandbox Code Playgroud)
对我来说,他们似乎做同样的事情,创建类型安全的"汽车"对象集合.
当您需要有关泛型类型参数的一些信息时,约束很好.通过约束类型,您不仅限制了有效类型参数的集合,而且还让您自己能够根据该类型的公共元素做出编译时决策.
在您的具体示例中,通用约束不提供任何好处,但在其他情况下它们可以.考虑这个例子:
T foo<T>()
{
return null;
}
Run Code Online (Sandbox Code Playgroud)
这个方法无法编译,因为编译器知道(当我编写方法时我应该知道)泛型类型参数可能是一个无法设置的值类型null.通过添加约束,我可以编译此代码:
T foo<T>()
where T : class
{
return null;
}
Run Code Online (Sandbox Code Playgroud)
我现在已经将有效的泛型类型参数集限制为只有类.由于编译器现在知道T必须是一个类,它允许我返回,null因为没有null无法返回的场景.虽然这不是一个非常有用的例子,但我相信你可以推断这有用的方法.