我一直在阅读有关利用泛型约束的内容,我发现泛型可以被限制为struct
, class
, new
, Class
and Interface
。前三个背后的原因非常明显。但我实在无法理解why and when约束到一个类。 IE
class Foo<T> where T : Bar
class Foo<T> where T : IBar
这使我们能够分别约束 Bar 及其子项、IBar 和实现者。我们不能只针对类或接口进行编程吗?因为这基本上就是多态性是为了,微软工程师绝不会愚蠢地实现无用的功能。
我缺少什么?
Update:
我的问题已被标记为重复:为什么在 C# 中使用泛型约束 https://stackoverflow.com/questions/4073852/why-use-generic-constraints-in-c-sharp
我认为事实并非如此。
我彻底浏览了这个问题,但没有真正找到答案:它一般讨论了通用约束的使用,而在这里我问的是为什么我们要约束类或接口,为什么不直接对其进行编程直接地 ?
也许这个简单的例子可能会有所帮助。
如果我有这些课程:
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());
您可以看到,我无法将宝马添加到保时捷列表中,但如果我只是在基类之外进行编程,则这是允许的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)