我已经学习了很长时间的Java并熟悉该语言中泛型类型的操作:我知道只有在编译时才会遇到类型擦除(所以在运行时这个信息不是在泛型类型上应用多态时,有一些困难的概念。
现在我正在学习C#,我注意到虽然这种语言使用类似的符号(Type)语义似乎并不相同。例如,要查看该问题,C#运行时是否存储了泛型类型的信息而不是丢弃它,与Java不同,这是正确的吗?另外,我从未在C#中看到过利用“jokers”(通配符)和类型< ?扩展TipoGenerico> 。这种语言是可能的(甚至是必要的)?
最后,C#支持单个方法(不仅仅是类)泛型?如果是,那么Java中这种结构的等价语法是什么:
public <T> void method (T parameter1 , parameter2 <T> List ) {
如果有任何值得强调的其他细节,或者可能需要一些参考材料来了解更多,也欢迎。
答案 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)
是语法