在Java中,C#中的泛型类型是什么?

时间:2014-03-21 19:31:52

标签: c# java

我已经学习了很长时间的Java并熟悉该语言中泛型类型的操作:我知道只有在编译时才会遇到类型擦除(所以在运行时这个信息不是在泛型类型上应用多态时,有一些困难的概念。

现在我正在学习C#,我注意到虽然这种语言使用类似的符号(Type)语义似乎并不相同。例如,要查看该问题,C#运行时是否存储了泛型类型的信息而不是丢弃它,与Java不同,这是正确的吗?另外,我从未在C#中看到过利用“jokers”(通配符)和类型< ?扩展TipoGenerico> 。这种语言是可能的(甚至是必要的)?

最后,C#支持单个方法(不仅仅是类)泛型?如果是,那么Java中这种结构的等价语法是什么:

public <T> void method (T parameter1 , parameter2 <T> List ) {

如果有任何值得强调的其他细节,或者可能需要一些参考材料来了解更多,也欢迎。

2 个答案:

答案 0 :(得分:4)

  

例如,要查看该问题,C#运行时是否存储了泛型类型的信息而不是丢弃它,与Java不同,这是正确的吗?

是的,这是正确的。 C#不会以这种方式受到类型擦除的限制。

  

另外,我从未在C#中看到过利用&#34;笑话&#34; (通配符)和类型&lt; ?扩展TipoGenerico&gt; 。这种语言是可能的(甚至是必要的)?

是的,这是通过generic constraints完成的,例如:

public class SomeType<T> where T : IEquatable<T> 
{

这将创建一个类T必须实现IEquatable<T>

的类
  

最后,C#支持单个方法(不仅仅是类)泛型?如果是,那么Java中这种结构的等价语法是什么:

public void Method<T>(T parameter1, List<T> parameter2)
{

答案 1 :(得分:2)

是的,C#不进行类型擦除,它确实是正确方式的泛型。 通配符是通过where子句实现的,您可以通过类似于通用类型的方式指定约束。

http://msdn.microsoft.com/en-us/library/bb384067.aspx

是的,C#包含方法泛型:

public void method<T>(T p1, T p2) 

是语法