首页 新闻 会员 周边

C#泛型为什么不像Java语言一样支持通配符?

0
悬赏园豆:10 [已关闭问题]

C#泛型为什么不像Java语言一样支持通配符?

王半仙的主页 王半仙 | 初学一级 | 园豆:180
提问于:2010-03-17 11:42
< >
分享
其他回答(3)
0

因为java的泛型实际都转成了object类型,而C#则是<>中的类型。

Damon.Tian | 园豆:255 (菜鸟二级) | 2010-03-17 12:36
0

java的泛型是java编译器的一个feature(特性),java的泛型采用的是 擦触发 来实现的,实际上他在编译器编译的时候都转换成object类型的。而C#的泛型是类型安全的,他是从CLR层面进行支持泛型的,和java实现的泛型不是一个层面的。

西越泽 | 园豆:10775 (专家六级) | 2010-03-17 12:49
谢谢!
支持(0) 反对(0) 王半仙 | 园豆:180 (初学一级) | 2010-03-17 13:00
0

C#的泛型是真正的泛型,是CLR支持的泛型。而Java的泛型使用了TypeErasure,是语法糖,属于伪泛型,JVM是不支持泛型的。

如果是使用通配符来限定类型对象的继承关系,在C#中可以使用where语句。如果是想实现继承关系,如A:B,那么List<A>:List<? extends B>这种关系,那么C#确实没有类似的语法支持。

麒麟.NET | 园豆:3614 (老鸟四级) | 2010-03-17 13:35
0

C#的泛型是真正的泛型,是CLR支持的泛型。而Java的泛型使用了TypeErasure,是语法糖,属于伪泛型,JVM是不支持泛型的。

详细可以看老赵的博文:http://www.cnblogs.com/JeffreyZhao/archive/2010/02/22/why-not-csharp-on-jvm-type-erasure.html

风影极光 | 园豆:1573 (小虾三级) | 2010-03-17 15:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册