对特定类的通用约束,为什么?

时间:2016-07-07 15:32:23

标签: c# .net

我一直在阅读利用通用约束的内容,我发现泛型可以限制为structclassnewClassInterface。前三个背后的原因非常明显。但是我无法理解为什么 来约束一个类。即

class Foo<T> where T : Bar 
class Foo<T> where T : IBar

这使我们可以分别约束Bar及其子女,IBar和实施者。我们不能只是编程到类或接口?因为那基本上是多态所针对的,而Microsoft工程师实现无用的功能并不愚蠢。

我错过了什么?

更新:

我的问题已标记为重复:Why use generic constraints in C#

我认为不是这样的。

我彻底地完成了这个问题,并没有真正找到答案:它一般性地讨论了泛型约束的使用,而在这里我询问为什么我们约束一个类或一个接口,为什么不直接编程呢?

1 个答案:

答案 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添加到保时捷列表中,但如果我只是编程了基类,那么它将被允许。