|
|
1
11
在非泛型的情况下,您无法保证对对象底层类型的访问。大多数类型的你可以抓住价值。GetType(),但用户可以传递Null并阻止您。 |
|
2
7
贾里德提到了其中的一些观点;另一个有趣的问题是:使用泛型,可以避免值类型的装箱
只要
这种差异在收藏等方面变得更加明显:
兽医
现在,由于C#3.0没有协方差(数组除外),我无法传递
|
|
3
3
但说真的,虽然它们看起来很相似,但它们之间存在根本差异。一个区别是,在运行时,JIT编译器将为将用于泛型版本的每种值类型生成代码。非泛型版本需要将值类型装箱,以便传递给函数。
在与代表打交道时,这种差异也很重要。签名
|
|
|
4
3
多个 对象必须实现的接口:
|
|
|
5
1
另一个微妙的区别是,你不能只在约束上重载方法(约束不是方法签名的一部分): 这是非法的:
虽然这是合法的:
|
|
|
6
0
在这种情况下需要考虑的另一个警告是,在泛型中使用“where T:<%your base interface or abstraction%>”可能会过度使用,从而使泛型类型在本质上非泛型。 IE:请记住,通过将泛型方法隔离到IMyInterface,您将该方法隔离到仅实现IMyInterfaces的类型。因此,如果你只是选择基于良好的面向对象编程原则使用IMyInterface,但你在任何地方都只有一个(或在某些情况下只有极少数)潜在类型可以实现该接口,那么你就没有达到使用泛型的目的。在这种情况下,第一种选择会更好。
|
|
|
7
0
一般来说,泛型方法的另一个区别(尽管不是你的例子)是,如果有一个方法像
|