我一直在阅读利用通用约束的内容,我发现泛型可以限制为struct
,class
,new
,Class
和Interface
。前三个背后的原因非常明显。但是我无法理解为什么和 来约束一个类。即
class Foo<T> where T : Bar
class Foo<T> where T : IBar
这使我们可以分别约束Bar及其子女,IBar和实施者。我们不能只是编程到类或接口?因为那基本上是多态所针对的,而Microsoft工程师实现无用的功能并不愚蠢。
我错过了什么?
更新:
我的问题已标记为重复:Why use generic constraints in C#
我认为不是这样的。
我彻底地完成了这个问题,并没有真正找到答案:它一般性地讨论了泛型约束的使用,而在这里我询问为什么我们约束一个类或一个接口,为什么不直接编程呢?
答案 0 :(得分:2)
也许这个简单的例子可能有所帮助。
如果我有这些课程:
public class ListOfCars<T> : List<T> where T : Car { }
public abstract class Car { }
public class Porsche : Car { }
public class Bmw : Car { }
...然后如果我写这段代码:
var porsches = new ListOfCars<Porsche>();
// OK
porsches.Add(new Porsche());
//Error - Can't add BMW's to Porsche List
porsches.Add(new Bmw());
您可以看到我无法将BMW添加到保时捷列表中,但如果我只是编程了基类,那么它将被允许。