c#中的泛型和Java中的一样

本文关键字:一样 Java 泛型 | 更新日期: 2023-09-27 17:51:19

我学习了很长时间的Java,非常熟悉语言中的泛型类型的操作:我知道只有在编译时,在它的末尾遭受类型擦除(因此在运行时该信息不可用),并且对泛型类型应用多态性时的困难有一些概念。

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

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

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

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

c#中的泛型和Java中的一样

例如,要看这个问题,c#运行时是否存储泛型类型的信息而不是丢弃它,不像Java,这是正确的吗?

是的,这是正确的。c#没有这种类型擦除的限制。

另外,我从未见过c#中使用"jokers"(通配符)和类型<? 扩展TipoGenerico>。这在该语言中是可能的(甚至是必要的)?

是的,这是通过泛型约束完成的,例如:

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

这将创建一个类,其中类型T必须实现IEquatable<T>

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

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

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

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

是的,c#包含了方法泛型:

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

是语法