为什么不总是使用泛型?

RKh*_*RKh 10 .net generics

我正在阅读有关仿制药的现有帖子.如果Generics有很多优点,如Type安全,没有装箱/拆箱的开销,而且速度很快,为什么不总是使用呢?为什么要使用非通用对象呢?

编辑(问题进一步扩展如下)

我有点困惑.几个月前我读到Generics的最后一次,我读到如果参数中的Type是可变的,那么应该使用Generic来防止错误.但我现在正在阅读的内容是,泛型将实现限制为固定类型,而非泛型对象允许您在运行时定义参数类型.

请帮我看看我错过了什么?

其次,在团队中工作并且代码可共享时,在适当的OOP设计(泛型等)中使用这些类型的构造会很有帮助.对于一个规模较小的独立程序员,谁知道Type必须参与哪个类型,似乎没有必要担心,使用Generic或Non-Generic类型之间差别不大.这准确吗?

Mar*_*ell 11

一般情况下你应该 - 但是,有时候(尤其是在编写库代码时),当不可能(或者当然不方便)知道调用类型(即使是T)时,所以非泛型类型(主要是接口等) as IList,IEnumerable)非常有用.数据绑定就是一个很好的例子.事实上,任何涉及反射的东西通常都会通过使用泛型变得更加困难,并且因为(通过反射的本质)你已经失去了这些好处,你可能只需要使用非泛型代码.反思与仿制药都不是很好的朋友,在所有.

  • @Tymek我们已经有了明显的数据绑定(想想`.DataSource`,你只是将`object`作为列表传递); 非均匀集合就是一个很好的例子.另一个是代码遍历对象结构的任何东西(序列化,也许) - 在这里,任何`T`要么只是最外面的节点(没有多少帮助),要么你必须为每个都有一个`TSomething`整个模型中的成员/子成员/列表/等(不漂亮); 同样地,调用`GetType()`并使用`Type`比调用`MakeGenericMethod()`来处理`T`要容易得多. (2认同)